前提
前两天刚写过一个沉浸状态栏的文章
地址:修改状态栏的颜色和字体颜色
今天拿来做适配,发现谷歌自家的,华为等品牌手机有虚拟按键,图中就能看出,虚拟按键完全把我的BottomNavigationView盖住了。
我是在style中设置沉浸效果,同时配合链接中的工具类进行部分机型的适配,是同样设置的请往下看解决方法。
style设置沉浸的代码
<style name="TranslucentTheme" parent="Theme.AppCompat.Light.NoActionBar"> <item name="android:windowTranslucentStatus">true</item> <item name="android:windowTranslucentNavigation">true</item> <!--Android 5.x开始需要把颜色设置透明,否则导航栏会呈现系统默认的浅灰色--> <item name="android:statusBarColor">@android:color/transparent</item></style>
模拟器版本 原生9.0.png
解决虚拟按键遮挡布局方法
修改style中的windowTranslucentNavigation
<item name="android:windowTranslucentNavigation">false</item>
修改后.png
修改之后,虚拟按键的确没有盖住布局了,可是我的状态栏不变色了
这里比较纳闷,只改了navigation而已,却影响到了statusBar。
解决状态栏沉浸失效方法
我们使用UI FLAG给布局添加SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN和SYSTEM_UI_FLAG_LAYOUT_STABLE,让布局占据状态栏的空间
注意,这两个必须结合使用。
/** * style的windowTranslucentNavigation设置为false后,状态栏无法达到沉浸效果 * 设置UI FLAG 让布局能占据状态栏的空间,达到沉浸效果 */ int option = View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE; activity.getWindow().getDecorView().setSystemUiVisibility(option);
修改UI FLAG后.png
OK,现在状态栏是沉浸的效果,虚拟按键也不会遮挡我的布局。
总结
碰到这个问题,看的文章不下几十篇,因为业务代码写法的前提不同,需要解决的方式也不同。而且android版本跨度大,机型多,总有部分设备效果不尽如人意。而且UI FLAG的种类繁多,我看了源码也没搞清楚他们之间的关联~
作者:space0o0
链接:https://www.jianshu.com/p/f36900c70250
点击查看更多内容
为 TA 点赞
评论
共同学习,写下你的评论
评论加载中...
作者其他优质文章
正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦