Zackratos / UltimateBarX

Make Android transparent statusbar and navigationbar easy.
Apache License 2.0
1.56k stars 166 forks source link

华为 mate8手机因为存在虚拟导航栏导致,导致布局多一块 #44

Open LLQQHH opened 3 years ago

LLQQHH commented 3 years ago

因为虚拟导航栏可以手动去关闭,手动关闭后,所以就多了一块黑的区域!我这边也无法监听到导航栏有没有被关闭,所以也无法动态去掉UltimateBarX写的导航栏那一块View image

loper7 commented 3 years ago

不仅是华为系列,很多手机可以动态选择是否使用底部导航栏,关于导航栏是否有的判断逻辑应该是有问题的

Zackratos commented 2 years ago

不仅是华为系列,很多手机可以动态选择是否使用底部导航栏,关于导航栏是否有的判断逻辑应该是有问题的

导航栏是否有的判断逻辑没有问题,问题是不能监听到导航栏的隐藏和显示

Zackratos commented 2 years ago

如果你只需要设置状态栏而不需要设置导航栏的话,更新到 0.8.0 版本,使用 statusBarOnly 方法替换 statusBar 方法可以彻底解决这个问题 @LLQQHH @loperSeven

LLQQHH commented 2 years ago

是否可以参考一下ImmersionBar这个库,我看了一下,他有做兼容处理!我收起来他也会跟着收起来

Zackratos commented 2 years ago

是否可以参考一下ImmersionBar这个库,我看了一下,他有做兼容处理!我收起来他也会跟着收起来

这个我要解释一下,其实 Android 中系统自带的设置导航栏的方法是不需要监听导航栏显示和隐藏的,本身就会跟着导航栏的变化而变化,但是系统自带的方法有个缺点就是状态栏和导航栏的设置的某些 api 是耦合在一起的,无法单独设置,我为了解决这个问题,让状态栏和导航栏可以单独设置,并且可以多次设置不同效果,就做了一些骚操作,首先只要你设置了不管设置的是状态栏还是导航栏,不管是什么效果,我都会把状态栏和导航栏进行一个初始化设置,这个初始化设置会让状态栏和导航栏都「沉浸」,然后再通过在根 View 中添加 View 的方式来设置具体需要的效果,这就导致一个问题,就是当导航栏发生变化的时候,虽然系统自带的沉浸效果可以一起随着变化,但是我添加的 View 依然存在,并且因为无法监听导航栏的变化,所以没法移除,就出现了你们遇到的这个问题,而 ImmersionBar 之所以没有这个问题,是因为他就是直接用的系统的 api 来设置导航栏的,所以他的状态栏和导航栏的方法无法解耦,也就不能单独设置也不能多次设置不同效果,然后,我最近更新的 0.8.0 版本提供了 statusBarOnly 方法其实就是只设置状态栏,导航栏始终没有设置,没有初始化沉浸,没有添加 View,也就不会出现这个问题了

zs1973 commented 1 year ago

如果使用statusBarOnly 下满的虚拟按键的背景和上面状态栏的背景就不一致了 我看了一下 你们线上的产品也是有这个问题的