为了账号安全,请及时绑定邮箱和手机立即绑定

android巨坑:沉浸的状态栏,布局不重叠的虚拟按键

标签:
Android

前提

前两天刚写过一个沉浸状态栏的文章
地址:修改状态栏的颜色和字体颜色

今天拿来做适配,发现谷歌自家的,华为等品牌手机有虚拟按键,图中就能看出,虚拟按键完全把我的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>

webp

模拟器版本 原生9.0.png

解决虚拟按键遮挡布局方法

修改style中的windowTranslucentNavigation

<item name="android:windowTranslucentNavigation">false</item>

webp

修改后.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);

webp

修改UI FLAG后.png

OK,现在状态栏是沉浸的效果,虚拟按键也不会遮挡我的布局。

总结

碰到这个问题,看的文章不下几十篇,因为业务代码写法的前提不同,需要解决的方式也不同。而且android版本跨度大,机型多,总有部分设备效果不尽如人意。而且UI FLAG的种类繁多,我看了源码也没搞清楚他们之间的关联~



作者:space0o0
链接:https://www.jianshu.com/p/f36900c70250


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消