Android状态栏&导航栏使用总结
1.概述
在我们的日常开发中,我们会有很多使用场景需要对状态栏 or 导航栏的可见性、背景颜色、图标颜色等方面进行控制,以达到更好的视觉效果。比如当我们全屏播放视频时,我们会将导航栏和状态栏隐藏;亦或者是当实现App全局状态栏沉浸效果时,我们会让布局内容延伸到状态栏。
总体来讲状态栏和导航栏的控制方法大致相似,但是部分方面也稍有区别,下文我们将两者控制方式总结如下。
2.用法
我们通过表格对状态栏和导航栏控制的相似之处进行汇总。
控制点 | 状态栏 | 导航栏 | 备注 |
---|---|---|---|
完全隐藏 | View # setSystemUiVisibility SYSTEM_UI_FLAG_FULLSCREEN |
View # setSystemUiVisibility SYSTEM_UI_FLAG_HIDE_NAVIGATION |
|
布局延伸 | View # setSystemUiVisibility SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN |
View # setSystemUiVisibility SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION |
为避免页面内容被遮挡,我们可以考虑向 XML 布局文件添加 android:fitsSystemWindows 属性并设置为 true,系统将自动向布局的父布局添加对应bar的高度的padding。 |
背景颜色 | Window # setStatusBarColor | Window # setNavigationBarColor | 目前Android只支持设置为黑色或者白色 |
图标颜色 | View # setSystemUiVisibility SYSTEM_UI_FLAG_LIGHT_STATUS_BAR |
View # setSystemUiVisibility SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR |
(亮色模式:图标为黑色) 清除标记即可进入暗色模式 |
Notes
1.通过View # setSystemUiVisibility改变状态栏或者导航栏状态后,当我们离开对应Activity时,这些改变会丢失,因此当我们重新回到此Activity时,我们应该在onResume 或者 onWindowFocusChanged中重新设置需要的状态。
3.资料
1.Android官方文档 # 隐藏状态栏
https://developer.android.google.cn/training/system-ui/status#java
1.Android官方文档 # 隐藏导航栏
https://developer.android.google.cn/training/system-ui/navigation