Giter VIP home page Giter VIP logo

ultimatebarx's Introduction

UltimateBarX

一款方便的设置状态栏和导航栏的各种效果的框架

github 地址:UltimateBarX

gitee 地址:UltimateBarX

详细介绍:这就是 github 上最好用的 Android 状态栏导航栏库

  • 可以设置各种效果,透明、半透明、固定颜色、布局是否侵入等
  • 状态栏和导航栏分开设置,互不影响
  • 支持 Android 4.4 以上,各系统版本的现实效果高度统一
  • 支持低版本(不支持变灰)重新设置状态栏导航栏的背景
  • 支持 ActivityFragment
  • 同一个 ActivityFragment 可以多次设置不同的效果
  • 适配刘海屏、滴水屏、挖孔屏、全面屏
  • 适配 miui、emui、funtouch 等 rom
  • 适配横屏、竖屏

同类型框架对比

UltimateBarX StatusBarCompat StatusBarUtil ImmersionBar
状态栏修改
导航栏修改
状态栏和导航栏
独立设置互不影响
light 模式
light 模式兼容低版本
支持 Fragment
布局侵入
布局不侵入
侵入和不侵入无缝切换
多次设置
适配全面屏
国产 rom 导航栏适配 ⭕️
BottomNavigationView 兼容
软键盘 adjustResize 兼容

使用方法

在根目录的 build.gradle 里面添加

allprojects {
    repositories {
        ...
        maven { url 'https://jitpack.io' }
    }
}

在子目录的 build.gradle 中添加

dependencies {
    // release 版本
    // 将 $lastVersion 替换成上图中的版本号
    implementation 'com.gitee.zackratos:UltimateBarX:$lastVersion'
    
    // snapshot 版本
    implementation 'com.gitee.zackratos:UltimateBarX:dev-SNAPSHOT'
}

UltimateBarX 中提供了三个方法,分别是

// 只需要设置状态栏,不需要设置导航栏
statusBarOnly {
    // 布局是否侵入状态栏(true 不侵入,false 侵入)
    fitWindow = true
    // 状态栏背景颜色(色值)
    color = Color.RED
    // 状态栏背景颜色(资源 id)
    colorRes = R.color.deepSkyBlue
    // 状态栏背景 drawable
    drawableRes = R.drawable.bg_common
    // 以上三个设置背景的方法用一个即可,如多次设置,后面的会把前面的覆盖掉
    // light模式:状态栏字体 true: 灰色,false: 白色 Android 6.0+
    light = true
    // 低版本 light 模式不生效,重新设置状态栏背景
    // 防止状态栏背景色跟字体颜色一致导致字体看不见
    // lvl 系列方法仅在低版本(不支持 light 模式的版本)下开启 light 模式生效
    lvlColor = Color.BLACK
    lvlColorRes = R.color.cyan
    lvlDrawableRes = R.drawable.bg_lvl
    // 以上三个 lvl 方法用一个即可,如多次设置,后面的会把前面的覆盖掉
}

// 设置状态栏
statusBar {
    fitWindow = true
    // ...
}

// 设置导航栏
navigationBar {
    fitWindow = true
    // ...
}

这三个方法都可以在 ActivityFragment 中使用
如果当前 ActivityFragment 只需要设置状态栏不需要设置导航栏建议使用 statusBarOnly 方法(使用 statusBar 方法也可以,但是在某些极端的情况下可能会出现异常效果)
其实国内的大部分(99%)需求都不需要设置导航栏,所以一般情况下,可以直接使用 statusBarOnly 方法
statusBarOnly 方法不可与 statusBar 方法同时使用,也不可与 navigationBar 方法同时使用,切记!!! 同时使用会出现异常效果(statusBar 方法和 navigationBar 方法可以同时使用)
也就是说,如果只需要设置状态栏,直接使用 statusBarOnly 方法, 如果需要同时设置状态栏和导航栏,使用 statusBar 方法和 navigationBar 方法组合实现需要的效果(如果只需要设置导航栏,那就使用 navigationBar 方法,不过这种需求几乎不存在)
使用 statusBarOnly 方法可以解决一切导航栏异常的问题,可以查看 issues44 里面的解释

使用 transparent 方法可以快速设置透明效果

statusBarOnly {
    transparent()
}

跟下面的写法效果是一样的

statusBarOnly {
    fitWindow = false
    color = Color.TRANSLUCENT
}

使用 get 系列方法可以在上一次的基础上修改

例如,先用下面的代码实现状态栏变红色,不侵入,非 light 模式

statusBarOnly {
    color = Color.RED
    fitWindow = true
    light = false
}

然后需要设置 light 模式,其他效果保持不变,直接用下面的方法即可

getStatusBarOnly {
    light = true
}

get 系列方法包括 getStatusBarOnlygetStatusBargetNavigationBar

当布局可侵入状态栏或导航栏时,如果需要给某个 View 增加状态栏或者导航栏的高度,可以

targetView.addStatusBarTopPadding()
targetView.addNavigationBarBottomPadding()

java 中使用

UltimateBarX.statusBarOnly(this)
        .fitWindow(true)
        .colorRes(R.color.deepSkyBlue)
        .light(true)
        .lvlColorRes(R.color.cyan)
        .apply();

如果项目中引入了 kotlin,也可以直接调用 kotlin 的扩展方法

UltimateBarXKt.statusBarOnly(this, barConfig -> {
    barConfig.setFitWindow(true);
    barConfig.setColorRes(R.color.deepSkyBlue);
    barConfig.setLight(true);
    barConfig.setLvlColorRes(R.color.cyan);
    return null;
});

0.7.0 以下版本的使用方法见 INSTRUCTION.old

ProGuard

-keep class com.zackratos.ultimatebarx.ultimatebarx.** { *; }
-keep public class * extends androidx.fragment.app.Fragment { *; }

截图

 

 

 

Change Log

CHANGELOG

联系我

在使用中遇到任何问题,欢迎加我微信交流

License

Copyright 2020 Zackratos

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

ultimatebarx's People

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

ultimatebarx's Issues

java.lang.IllegalStateException

crash了,fragment一般都是在onCreateView()中设置的,Google官方建议的初始化方法也是onCreate()或者onCreateView(),这个库只能在onCreateView()之后在fragment中使用?

java.lang.IllegalStateException: Fragment HomeFragment{19cbea8} (3ebf211b-78e4-4379-998a-34caeb0aa6fc id=0x7f0800d6 tag=HOME) did not return a View from onCreateView() or this was called before onCreateView().
at androidx.fragment.app.Fragment.requireView(Fragment.java:1964)
at com.zackratos.ultimatebarx.ultimatebarx.core.CoreKt.addFrameLayoutWrapper(Core.kt:172)
at com.zackratos.ultimatebarx.ultimatebarx.core.CoreKt.ultimateBarXInitialization(Core.kt:53)
at com.zackratos.ultimatebarx.ultimatebarx.OperatorKt.applyStatusBar(Operator.kt:44)
at com.zackratos.ultimatebarx.ultimatebarx.UltimateBarXKt.statusBar(UltimateBarX.kt:88)
at com.zackratos.ultimatebarx.ultimatebarx.UltimateBarXKt.statusBar(UltimateBarX.kt:23)
at com.redflag.baselib.ui.BaseFragment.setStatusBar(BaseFragment.kt:81)
at com.redflag.baselib.ui.BaseFragment.onCreateView(BaseFragment.kt:40)

adjustResize存在bug

RecyclerView中的EditText,点击后弹出软键盘,底栏会出现在软键盘之上。

但光标会在底栏的下方(也就是说依然是类似被软键盘遮挡的状态)。

小米手机上崩溃

2021-01-28 11:43:52.083 17441-17441/com.pionex.lite E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.pionex.lite, PID: 17441
java.lang.StackOverflowError: stack size 8192KB
at android.util.MemoryIntArray.enforceValidIndex(MemoryIntArray.java:212)
at android.util.MemoryIntArray.get(MemoryIntArray.java:107)
at android.provider.Settings$GenerationTracker.readCurrentGeneration(Settings.java:2196)
at android.provider.Settings$GenerationTracker.isGenerationChanged(Settings.java:2180)
at android.provider.Settings$NameValueCache.getStringForUser(Settings.java:2310)
at android.provider.Settings$Global.getStringForUser(Settings.java:14009)
at android.provider.Settings$Global.getString(Settings.java:13997)
at android.provider.Settings$Global.getInt(Settings.java:14179)
at com.zackratos.ultimatebarx.library.rom.MiuiRom.fullScreenGestureOn(MiuiRom.kt:20)
at com.zackratos.ultimatebarx.library.rom.BaseRom.navigationBarExist(BaseRom.kt:18)
at com.zackratos.ultimatebarx.library.UltimateBarXExposedKt.getNavigationBarHeight(UltimateBarXExposed.kt:26)
at com.zackratos.ultimatebarx.library.rom.MiuiRom.screenIndicatorOn(MiuiRom.kt:25)
at com.zackratos.ultimatebarx.library.rom.BaseRom.navigationBarExist(BaseRom.kt:19)
at com.zackratos.ultimatebarx.library.UltimateBarXExposedKt.getNavigationBarHeight(UltimateBarXExposed.kt:26)
at com.zackratos.ultimatebarx.library.rom.MiuiRom.screenIndicatorOn(MiuiRom.kt:25)
at com.zackratos.ultimatebarx.library.rom.BaseRom.navigationBarExist(BaseRom.kt:19)
at com.zackratos.ultimatebarx.library.UltimateBarXExposedKt.getNavigationBarHeight(UltimateBarXExposed.kt:26)
at com.zackratos.ultimatebarx.library.rom.MiuiRom.screenIndicatorOn(MiuiRom.kt:25)
at com.zackratos.ultimatebarx.library.rom.BaseRom.navigationBarExist(BaseRom.kt:19)
at com.zackratos.ultimatebarx.library.UltimateBarXExposedKt.getNavigationBarHeight(UltimateBarXExposed.kt:26)
at com.zackratos.ultimatebarx.library.rom.MiuiRom.screenIndicatorOn(MiuiRom.kt:25)
at com.zackratos.ultimatebarx.library.rom.BaseRom.navigationBarExist(BaseRom.kt:19)
at com.zackratos.ultimatebarx.library.UltimateBarXExposedKt.getNavigationBarHeight(UltimateBarXExposed.kt:26)
at com.zackratos.ultimatebarx.library.rom.MiuiRom.screenIndicatorOn(MiuiRom.kt:25)
at com.zackratos.ultimatebarx.library.rom.BaseRom.navigationBarExist(BaseRom.kt:19)
at com.zackratos.ultimatebarx.library.UltimateBarXExposedKt.getNavigationBarHeight(UltimateBarXExposed.kt:26)
at com.zackratos.ultimatebarx.library.rom.MiuiRom.screenIndicatorOn(MiuiRom.kt:25)
at com.zackratos.ultimatebarx.library.rom.BaseRom.navigationBarExist(BaseRom.kt:19)
at com.zackratos.ultimatebarx.library.UltimateBarXExposedKt.getNavigationBarHeight(UltimateBarXExposed.kt:26)
at com.zackratos.ultimatebarx.library.rom.MiuiRom.screenIndicatorOn(MiuiRom.kt:25)
at com.zackratos.ultimatebarx.library.rom.BaseRom.navigationBarExist(BaseRom.kt:19)
at com.zackratos.ultimatebarx.library.UltimateBarXExposedKt.getNavigationBarHeight(UltimateBarXExposed.kt:26)
at com.zackratos.ultimatebarx.library.rom.MiuiRom.screenIndicatorOn(MiuiRom.kt:25)
at com.zackratos.ultimatebarx.library.rom.BaseRom.navigationBarExist(BaseRom.kt:19)
at com.zackratos.ultimatebarx.library.UltimateBarXExposedKt.getNavigationBarHeight(UltimateBarXExposed.kt:26)
at com.zackratos.ultimatebarx.library.rom.MiuiRom.screenIndicatorOn(MiuiRom.kt:25)
at com.zackratos.ultimatebarx.library.rom.BaseRom.navigationBarExist(BaseRom.kt:19)
at com.zackratos.ultimatebarx.library.UltimateBarXExposedKt.getNavigationBarHeight(UltimateBarXExposed.kt:26)
at com.zackratos.ultimatebarx.library.rom.MiuiRom.screenIndicatorOn(MiuiRom.kt:25)
at com.zackratos.ultimatebarx.library.rom.BaseRom.navigationBarExist(BaseRom.kt:19)
at com.zackratos.ultimatebarx.library.UltimateBarXExposedKt.getNavigationBarHeight(UltimateBarXExposed.kt:26)
at com.zackratos.ultimatebarx.library.rom.MiuiRom.screenIndicatorOn(MiuiRom.kt:25)
at com.zackratos.ultimatebarx.library.rom.BaseRom.navigationBarExist(BaseRom.kt:19)
2021-01-28 11:43:52.085 17441-17441/com.pionex.lite E/AndroidRuntime: at com.zackratos.ultimatebarx.library.UltimateBarXExposedKt.getNavigationBarHeight(UltimateBarXExposed.kt:26)
at com.zackratos.ultimatebarx.library.rom.MiuiRom.screenIndicatorOn(MiuiRom.kt:25)
at com.zackratos.ultimatebarx.library.rom.BaseRom.navigationBarExist(BaseRom.kt:19)
at com.zackratos.ultimatebarx.library.UltimateBarXExposedKt.getNavigationBarHeight(UltimateBarXExposed.kt:26)
at com.zackratos.ultimatebarx.library.rom.MiuiRom.screenIndicatorOn(MiuiRom.kt:25)
at com.zackratos.ultimatebarx.library.rom.BaseRom.navigationBarExist(BaseRom.kt:19)
at com.zackratos.ultimatebarx.library.UltimateBarXExposedKt.getNavigationBarHeight(UltimateBarXExposed.kt:26)
at com.zackratos.ultimatebarx.library.rom.MiuiRom.screenIndicatorOn(MiuiRom.kt:25)
at com.zackratos.ultimatebarx.library.rom.BaseRom.navigationBarExist(BaseRom.kt:19)
at com.zackratos.ultimatebarx.library.UltimateBarXExposedKt.getNavigationBarHeight(UltimateBarXExposed.kt:26)
at com.zackratos.ultimatebarx.library.rom.MiuiRom.screenIndicatorOn(MiuiRom.kt:25)
at com.zackratos.ultimatebarx.library.rom.BaseRom.navigationBarExist(BaseRom.kt:19)
at com.zackratos.ultimatebarx.library.UltimateBarXExposedKt.getNavigationBarHeight(UltimateBarXExposed.kt:26)
at com.zackratos.ultimatebarx.library.rom.MiuiRom.screenIndicatorOn(MiuiRom.kt:25)
at com.zackratos.ultimatebarx.library.rom.BaseRom.navigationBarExist(BaseRom.kt:19)
at com.zackratos.ultimatebarx.library.UltimateBarXExposedKt.getNavigationBarHeight(UltimateBarXExposed.kt:26)
at com.zackratos.ultimatebarx.library.rom.MiuiRom.screenIndicatorOn(MiuiRom.kt:25)
at com.zackratos.ultimatebarx.library.rom.BaseRom.navigationBarExist(BaseRom.kt:19)
at com.zackratos.ultimatebarx.library.UltimateBarXExposedKt.getNavigationBarHeight(UltimateBarXExposed.kt:26)
at com.zackratos.ultimatebarx.library.rom.MiuiRom.screenIndicatorOn(MiuiRom.kt:25)
at com.zackratos.ultimatebarx.library.rom.BaseRom.navigationBarExist(BaseRom.kt:19)
at com.zackratos.ultimatebarx.library.UltimateBarXExposedKt.getNavigationBarHeight(UltimateBarXExposed.kt:26)
at com.zackratos.ultimatebarx.library.rom.MiuiRom.screenIndicatorOn(MiuiRom.kt:25)
at com.zackratos.ultimatebarx.library.rom.BaseRom.navigationBarExist(BaseRom.kt:19)
at com.zackratos.ultimatebarx.library.UltimateBarXExposedKt.getNavigationBarHeight(UltimateBarXExposed.kt:26)
at com.zackratos.ultimatebarx.library.rom.MiuiRom.screenIndicatorOn(MiuiRom.kt:25)
at com.zackratos.ultimatebarx.library.rom.BaseRom.navigationBarExist(BaseRom.kt:19)
at com.zackratos.ultimatebarx.library.UltimateBarXExposedKt.getNavigationBarHeight(UltimateBarXExposed.kt:26)
at com.zackratos.ultimatebarx.library.rom.MiuiRom.screenIndicatorOn(MiuiRom.kt:25)
at com.zackratos.ultimatebarx.library.rom.BaseRom.navigationBarExist(BaseRom.kt:19)
at com.zackratos.ultimatebarx.library.UltimateBarXExposedKt.getNavigationBarHeight(UltimateBarXExposed.kt:26)
at com.zackratos.ultimatebarx.library.rom.MiuiRom.screenIndicatorOn(MiuiRom.kt:25)
at com.zackratos.ultimatebarx.library.rom.BaseRom.navigationBarExist(BaseRom.kt:19)
at com.zackratos.ultimatebarx.library.UltimateBarXExposedKt.getNavigationBarHeight(UltimateBarXExposed.kt:26)
at com.zackratos.ultimatebarx.library.rom.MiuiRom.screenIndicatorOn(MiuiRom.kt:25)
at com.zackratos.ultimatebarx.library.rom.BaseRom.navigationBarExist(BaseRom.kt:19)
at com.zackratos.ultimatebarx.library.UltimateBarXExposedKt.getNavigationBarHeight(UltimateBarXExposed.kt:26)
at com.zackratos.ultimatebarx.library.rom.MiuiRom.screenIndicatorOn(MiuiRom.kt:25)
at com.zackratos.ultimatebarx.library.rom.BaseRom.navigationBarExist(BaseRom.kt:19)
at com.zackratos.ultimatebarx.library.UltimateBarXExposedKt.getNavigationBarHeight(UltimateBarXExposed.kt:26)
at com.zackratos.ultimatebarx.library.rom.MiuiRom.screenIndicatorOn(MiuiRom.kt:25)
at com.zackratos.ultimatebarx.library.rom.BaseRom.navigationBarExist(BaseRom.kt:19)
2021-01-28 11:43:52.870 17441-17441/com.pionex.lite I/chatty: uid=10230(com.pionex.lite) identical 1872 lines
2021-01-28 11:43:52.870 17441-17441/com.pionex.lite E/AndroidRuntime: at com.zackratos.ultimatebarx.library.UltimateBarXExposedKt.getNavigationBarHeight(UltimateBarXExposed.kt:26)
at com.zackratos.ultimatebarx.library.rom.MiuiRom.screenIndicatorOn(MiuiRom.kt:25)
at com.zackratos.ultimatebarx.library.rom.BaseRom.navigationBarExist(BaseRom.kt:19)
at com.zackratos.ultimatebarx.library.UltimateBarXExposedKt.getNavigationBarHeight(UltimateBarXExposed.kt:26)
at com.zackratos.ultimatebarx.library.rom.MiuiRom.screenIndicatorOn(MiuiRom.kt:25)
at com.zackratos.ultimatebarx.library.rom.BaseRom.navigationBarExist(BaseRom.kt:19)
at com.zackratos.ultimatebarx.library.UltimateBarXExposedKt.getNavigationBarHeight(UltimateBarXExposed.kt:26)
at com.zackratos.ultimatebarx.library.rom.MiuiRom.screenIndicatorOn(MiuiRom.kt:25)
at com.zackratos.ultimatebarx.library.rom.BaseRom.navigationBarExist(BaseRom.kt:19)
at com.zackratos.ultimatebarx.library.UltimateBarXExposedKt.getNavigationBarHeight(UltimateBarXExposed.kt:26)
at com.zackratos.ultimatebarx.library.rom.MiuiRom.screenIndicatorOn(MiuiRom.kt:25)
at com.zackratos.ultimatebarx.library.rom.BaseRom.navigationBarExist(BaseRom.kt:19)
at com.zackratos.ultimatebarx.library.UltimateBarXExposedKt.getNavigationBarHeight(UltimateBarXExposed.kt:26)
at com.zackratos.ultimatebarx.library.rom.MiuiRom.screenIndicatorOn(MiuiRom.kt:25)
at com.zackratos.ultimatebarx.library.rom.BaseRom.navigationBarExist(BaseRom.kt:19)
at com.zackratos.ultimatebarx.library.UltimateBarXExposedKt.getNavigationBarHeight(UltimateBarXExposed.kt:26)
at com.zackratos.ultimatebarx.library.rom.MiuiRom.screenIndicatorOn(MiuiRom.kt:25)
at com.zackratos.ultimatebarx.library.rom.BaseRom.navigationBarExist(BaseRom.kt:19)
at com.zackratos.ultimatebarx.library.UltimateBarXExposedKt.getNavigationBarHeight(UltimateBarXExposed.kt:26)
at com.zackratos.ultimatebarx.library.rom.MiuiRom.screenIndicatorOn(MiuiRom.kt:25)
at com.zackratos.ultimatebarx.library.rom.BaseRom.navigationBarExist(BaseRom.kt:19)
at com.zackratos.ultimatebarx.library.UltimateBarXExposedKt.getNavigationBarHeight(UltimateBarXExposed.kt:26)
at com.zackratos.ultimatebarx.library.rom.MiuiRom.screenIndicatorOn(MiuiRom.kt:25)
at com.zackratos.ultimatebarx.library.rom.BaseRom.navigationBarExist(BaseRom.kt:19)
at com.zackratos.ultimatebarx.library.UltimateBarXExposedKt.getNavigationBarHeight(UltimateBarXExposed.kt:26)
at com.zackratos.ultimatebarx.library.rom.MiuiRom.screenIndicatorOn(MiuiRom.kt:25)
at com.zackratos.ultimatebarx.library.rom.BaseRom.navigationBarExist(BaseRom.kt:19)
at com.zackratos.ultimatebarx.library.UltimateBarXExposedKt.getNavigationBarHeight(UltimateBarXExposed.kt:26)
at com.zackratos.ultimatebarx.library.rom.MiuiRom.screenIndicatorOn(MiuiRom.kt:25)
at com.zackratos.ultimatebarx.library.rom.BaseRom.navigationBarExist(BaseRom.kt:19)
at com.zackratos.ultimatebarx.library.UltimateBarXExposedKt.getNavigationBarHeight(UltimateBarXExposed.kt:26)
at com.zackratos.ultimatebarx.library.rom.MiuiRom.screenIndicatorOn(MiuiRom.kt:25)
at com.zackratos.ultimatebarx.library.rom.BaseRom.navigationBarExist(BaseRom.kt:19)
at com.zackratos.ultimatebarx.library.UltimateBarXExposedKt.getNavigationBarHeight(UltimateBarXExposed.kt:26)
at com.zackratos.ultimatebarx.library.rom.MiuiRom.screenIndicatorOn(MiuiRom.kt:25)
at com.zackratos.ultimatebarx.library.rom.BaseRom.navigationBarExist(BaseRom.kt:19)
at com.zackratos.ultimatebarx.library.UltimateBarXExposedKt.getNavigationBarHeight(UltimateBarXExposed.kt:26)
at com.zackratos.ultimatebarx.library.rom.MiuiRom.screenIndicatorOn(MiuiRom.kt:25)
at com.zackratos.ultimatebarx.library.rom.BaseRom.navigationBarExist(BaseRom.kt:19)
at com.zackratos.ultimatebarx.library.UltimateBarXExposedKt.getNavigationBarHeight(UltimateBarXExposed.kt:26)
at com.zackratos.ultimatebarx.library.rom.MiuiRom.screenIndicatorOn(MiuiRom.kt:25)
at com.zackratos.ultimatebarx.library.rom.BaseRom.navigationBarExist(BaseRom.kt:19)
2021-01-28 11:43:52.871 17441-17441/com.pionex.lite E/AndroidRuntime: at com.zackratos.ultimatebarx.library.UltimateBarXExposedKt.getNavigationBarHeight(UltimateBarXExposed.kt:26)
at com.zackratos.ultimatebarx.library.rom.MiuiRom.screenIndicatorOn(MiuiRom.kt:25)
at com.zackratos.ultimatebarx.library.rom.BaseRom.navigationBarExist(BaseRom.kt:19)
at com.zackratos.ultimatebarx.library.UltimateBarXExposedKt.getNavigationBarHeight(UltimateBarXExposed.kt:26)
at com.zackratos.ultimatebarx.library.rom.MiuiRom.screenIndicatorOn(MiuiRom.kt:25)
at com.zackratos.ultimatebarx.library.rom.BaseRom.navigationBarExist(BaseRom.kt:19)
at com.zackratos.ultimatebarx.library.UltimateBarXExposedKt.getNavigationBarHeight(UltimateBarXExposed.kt:26)
at com.zackratos.ultimatebarx.library.rom.MiuiRom.screenIndicatorOn(MiuiRom.kt:25)
at com.zackratos.ultimatebarx.library.rom.BaseRom.navigationBarExist(BaseRom.kt:19)
at com.zackratos.ultimatebarx.library.UltimateBarXExposedKt.getNavigationBarHeight(UltimateBarXExposed.kt:26)
at com.zackratos.ultimatebarx.library.rom.MiuiRom.screenIndicatorOn(MiuiRom.kt:25)
at com.zackratos.ultimatebarx.library.rom.BaseRom.navigationBarExist(BaseRom.kt:19)
at com.zackratos.ultimatebarx.library.UltimateBarXExposedKt.getNavigationBarHeight(UltimateBarXExposed.kt:26)
at com.zackratos.ultimatebarx.library.rom.MiuiRom.screenIndicatorOn(MiuiRom.kt:25)
at com.zackratos.ultimatebarx.library.rom.BaseRom.navigationBarExist(BaseRom.kt:19)
at com.zackratos.ultimatebarx.library.UltimateBarXExposedKt.getNavigationBarHeight(UltimateBarXExposed.kt:26)
at com.zackratos.ultimatebarx.library.rom.MiuiRom.screenIndicatorOn(MiuiRom.kt:25)
at com.zackratos.ultimatebarx.library.rom.BaseRom.navigationBarExist(BaseRom.kt:19)
at com.zackratos.ultimatebarx.library.UltimateBarXExposedKt.getNavigationBarHeight(UltimateBarXExposed.kt:26)
at com.zackratos.ultimatebarx.library.rom.MiuiRom.screenIndicatorOn(MiuiRom.kt:25)
at com.zackratos.ultimatebarx.library.rom.BaseRom.navigationBarExist(BaseRom.kt:19)
at com.zackratos.ultimatebarx.library.UltimateBarXExposedKt.getNavigationBarHeight(UltimateBarXExposed.kt:26)
at com.zackratos.ultimatebarx.library.rom.MiuiRom.screenIndicatorOn(MiuiRom.kt:25)
at com.zackratos.ultimatebarx.library.rom.BaseRom.navigationBarExist(BaseRom.kt:19)
at com.zackratos.ultimatebarx.library.UltimateBarXExposedKt.getNavigationBarHeight(UltimateBarXExposed.kt:26)
at com.zackratos.ultimatebarx.library.rom.MiuiRom.screenIndicatorOn(MiuiRom.kt:25)
at com.zackratos.ultimatebarx.library.rom.BaseRom.navigationBarExist(BaseRom.kt:19)
at com.zackratos.ultimatebarx.library.UltimateBarXExposedKt.getNavigationBarHeight(UltimateBarXExposed.kt:26)
at com.zackratos.ultimatebarx.library.rom.MiuiRom.screenIndicatorOn(MiuiRom.kt:25)
at com.zackratos.ultimatebarx.library.rom.BaseRom.navigationBarExist(BaseRom.kt:19)
at com.zackratos.ultimatebarx.library.UltimateBarXExposedKt.getNavigationBarHeight(UltimateBarXExposed.kt:26)
at com.zackratos.ultimatebarx.library.rom.MiuiRom.screenIndicatorOn(MiuiRom.kt:25)
at com.zackratos.ultimatebarx.library.rom.BaseRom.navigationBarExist(BaseRom.kt:19)
at com.zackratos.ultimatebarx.library.UltimateBarXExposedKt.getNavigationBarHeight(UltimateBarXExposed.kt:26)
at com.zackratos.ultimatebarx.library.rom.MiuiRom.screenIndicatorOn(MiuiRom.kt:25)
at com.zackratos.ultimatebarx.library.rom.BaseRom.navigationBarExist(BaseRom.kt:19)
at com.zackratos.ultimatebarx.library.core.UltimateBarXKt.updateNavigationBarView(UltimateBarX.kt:139)
at com.zackratos.ultimatebarx.library.core.UltimateBarXKt.updateNavigationBar(UltimateBarX.kt:69)
at com.zackratos.ultimatebarx.library.core.UltimateBarXKt.defaultNavigationBar(UltimateBarX.kt:105)
at com.zackratos.ultimatebarx.library.operator.ActivityOperator.applyStatusBar(ActivityOperator.kt:27)
at com.pionex.lite.BaseReactActivity.onCreate(BaseReactActivity.java:26)
at com.pionex.lite.MainActivity.onCreate(MainActivity.java:21)
at android.app.Activity.performCreate(Activity.java:7893)
2021-01-28 11:43:52.871 17441-17441/com.pionex.lite E/AndroidRuntime: at android.app.Activity.performCreate(Activity.java:7880)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1306)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3286)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3460)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:83)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2047)
at android.os.Handler.dispatchMessage(Handler.java:107)
at android.os.Looper.loop(Looper.java:224)
at android.app.ActivityThread.main(ActivityThread.java:7584)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:539)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:950)

设置navigationbar无效

红米K30,有DrawerLayout

override fun onDrawerSlide(drawerView: View, slideOffset: Float) { val bar_color = if (slideOffset == 0F) R.color.colorPrimary else R.color.color_system_drawer navigationBar { colorRes = bar_color } statusBar { colorRes = bar_color } }
监听DrawerLayout打开关闭更新bar颜色。

进入界面是竖屏,打开DrawerLayout,关闭DrawerLayout,切换横屏,打开DrawerLayout,发现设置的navigationbar颜色无效,statusbar有效

不能导入library

你好,感谢你的开源代码。可是当我试着导入您的library时,我发现我找不到 关于 UltimateBarX 的相关代码。
"Rebuild Project" 后 我得到一下的问题。
请问可以帮帮我吗?谢谢你。

image

navigation和fragment一起出现的bug

image

implementation 'com.zackratos.ultimatebarx:ultimatebarx:0.3.1'
implementation 'androidx.navigation:navigation-fragment-ktx:2.3.1'
implementation 'androidx.navigation:navigation-ui-ktx:2.3.1'
//activity的布局
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <fragment
        android:id="@+id/host_fragment"
        android:name="androidx.navigation.fragment.NavHostFragment"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:defaultNavHost="true"
        app:navGraph="@navigation/bug_navigation" />

</FrameLayout>
//navigation的布局
<navigation xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/mobile_navigation"
    app:startDestination="@+id/bugFragment">

    <fragment
        android:id="@+id/bugFragment"
        android:name="com.zackratos.ultimatebarx.sample.BugFragment"
        tools:layout="@layout/fragment_image"/>


</navigation>
//Fragment代码
public class BugFragment extends Fragment {

    public BugFragment() {
        super(R.layout.fragment_image);
    }


    @Override
    public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        UltimateBarX.with(this)
                .fitWindow(true)// 布局是否侵入状态栏(true 不侵入,false 侵入)
                .color(Color.BLACK)
                .applyStatusBar();
    }
}

fragment的根布局非FrameLayout和RelativeLayout

//fragment的布局
<ImageView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/ivYurisa"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:scaleType="centerCrop"/>

大佬你好,遇到一个问题

大佬你好,遇到一个问题加载状态栏,导航栏也会出现,我根本用不到导航栏,目前是 UltimateBarX.create(UltimateBarX.NAVIGATION_BAR)
.transparent()
.apply(this);通过这个代码透明化。请问怎么去除导航栏

适配效果问题

UltimateBarX.with(this)
.fitWindow(false)
.transparent()
.light(true)
.applyStatusBar();
在vivox7 Android5.1系统上用上面的配置底部出现黑色的区域
UltimateBarX.with(this)
.fitWindow(false)
.transparent()
.light(true)
.applyNavigationBar();
换成这个底部黑色区域没了,但是状态栏颜色跟没适配之前一样了
这是我使用的方式有问题吗

addStatusBarTopPadding(view)无法动态设置吗?

或者说清除之前设置的view add另一个view
CoordinatorLayout+AppBarLayout+CollapsingToolbarLayout使用的时候,我有个自己的标题栏,还有个系统的Toolbar 我需要根据展开收缩显示不同的标题布局,现在动态调用addStatusBarTopPadding(view)两个标题栏高度一直在叠加

底部导航栏重叠问题

当在全面屏模式下开启手势提示线时,导航栏会和布局重叠。
demo的效果如下:
AirPlay_Screenshot_2020-12-22_07-18-40
AirPlay_Screenshot_2020-12-22_07-17-28

机型:Redmi note 8 pro

状态栏透明的情况下adjustResize无效

UltimateBarX.with(this) .transparent() .light(true) .applyStatusBar()
这个配置下会导致状态栏透明,透明会导致软键盘的adjustResize无效,不用这个库的情况下状态栏透明后在根布局加上android:fitsSystemWindows="true"可以解决,但是用这个库加上也没用,请问如何解决这个问题。

基类调用无效果

基类里面调用没有效果

class MainActivity : BaseActivity() {

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.main_activity)
    if (savedInstanceState == null) {
        supportFragmentManager.beginTransaction()
            .replace(R.id.fragmetn_container, MainFragment())
            .commitNow()
    }
}

}

open class BaseActivity : AppCompatActivity() {

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    initStatusBar()
}

protected fun initStatusBar() {
    UltimateBarX.with(this)
            .fitWindow(true)

// .color(Color.RED) // 状态栏背景颜色(色值)
.colorRes(R.color.main_theme_color) // 状态栏背景颜色(资源id)
// .drawableRes(R.mipmap.user_center_top_nav_bg)
// .light(false)
.applyStatusBar()
}

}

addStatusBarTopPadding高度问题

internal fun View.addStatusBarTopPadding() {
setPadding(paddingLeft, paddingTop + statusBarHeight, paddingRight, paddingBottom)
val lp = layoutParams
if (lp.height != ViewGroup.LayoutParams.MATCH_PARENT && lp.height != ViewGroup.LayoutParams.WRAP_CONTENT) {
lp.height += statusBarHeight
layoutParams = lp
return
}
post {
lp.height = height + statusBarHeight
layoutParams = lp
}
}

addStatusBarTopPadding这个方法if+post里执行的都一样,你想排除WRAP_CONTENT和MATCH_PARENT的情况不就失效了吗?目前我的布局height是WRAP_CONTENT,就多加了statusBarHeight。

当手机设置的手势操作时,无导航栏时 有问题

问题描述:
当手机设置的手势操作时,无导航栏时 使用插件设置状态栏时导航栏 会默认突然显示出来 在屏幕最低下 是一块黑色区域

正常导航栏不应该显示占位 原来UltimateBar 没有这种问题

正常应该是有导航栏显示时 如果未设置 按系统默认处理 不用管 布局默认不侵入 导航栏 如果侵入会导致 APP菜单栏 与导航栏重叠

当无导航栏 手势操控时 设置状态栏 不应该影响导航栏

现在插件主要问题是 当手机没有导航栏时 设置状态栏 会出现导航栏 在底部一块黑色区域占位 很不友好 需要再次 设置导航栏透明才可以 但是当设置导航栏透明后 如果用户将导航栏放出 又会出现 布局入侵到导航栏 导航栏与APP底部菜单重叠问题

希望作者能处理下 非常感谢

UltimateBarX.create(UltimateBarX.STATUS_BAR)
.fitWindow(isLayoutInvade) // 布局是否侵入状态栏(true 不侵入,false 侵入)
.bgColorRes(defaultStatusBarColor) // 状态栏背景颜色(资源id)
.light(statueBarTextColor) // 文字颜色 //true 黑色 false 白色
.apply(context);

单Activity,多Fragment的情况下的问题

只为Activity指定不侵入状态栏,Fragment正常使用;为Activity指定不侵入状态栏,再单独指定某一个Fragment不侵入状态栏,其他Fragment全部变成侵入状态栏。

小白条看不见了

navigationBar {
fitWindow = true
color = Color.WHITE
light = true
}

miui下小白条看不见了

状态栏设置light模式不生效

implementation 'com.zackratos.ultimatebarx:ultimatebarx:0.3.3'

ROM : MIUI 11

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_home);
    UltimateBarX.with(this).light(false).applyStatusBar();

...
}

使用透明状态栏后问题

我是初学者,我仅在activity中使用 UltimateBarX.with(this)
.transparent()
.applyStatusBar()
后,发现toolbar(整体布局都)上移了
image
这样。
这是正常的
image

布局里BottomNavigationView FrameLayout或FragmentContainerView 点击item之后,item会拉伸变高

布局文件


<androidx.fragment.app.FragmentContainerView
android:id="@+id/fl_main"
android:layout_weight="1"
android:layout_width="match_parent"
android:layout_height="0dp" />

<com.google.android.material.bottomnavigation.BottomNavigationView
    android:id="@+id/bottomNav"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@android:color/white"
    app:menu="@menu/bottom_nav_menu"/>

class 文件

class BottomNavFragmentActivity : ViewBindingActivity() {
private var lastPosition = 0
private var mFragments = ArrayList()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
mFragments.clear()
mFragments.add(FragmentTest())
mFragments.add(FragmentTest())
mFragments.add(FragmentTest())
mFragments.add(FragmentTest())
setFragmentPosition(0);

    statusBar {
        light = true
    }
    binding.bottomNav.setOnNavigationItemSelectedListener {
        when (it.itemId) {
            R.id.item_album -> {
                setFragmentPosition(0);
            }
            R.id.item_android -> {
                setFragmentPosition(1);
            }
            R.id.item_camera -> {
                setFragmentPosition(2);
            }
            R.id.item_games -> {
                setFragmentPosition(3);
            }
            else -> {

            }
        }
        return@setOnNavigationItemSelectedListener true
    }
}
private fun setFragmentPosition(position: Int) {

    val ft = supportFragmentManager.beginTransaction()
    val currentFragment = mFragments[position]
    val lastFragment = mFragments[lastPosition]
    lastPosition = position

    ft.hide(lastFragment)
    if (!currentFragment.isAdded) {
        supportFragmentManager.beginTransaction().remove(currentFragment).commit()
        ft.add(R.id.fl_main, mFragments[position])
    }
    ft.show(currentFragment)
    ft.commitAllowingStateLoss()
}

}

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.