使用android原生的方法设置setSystemUiVisibility,以下是设置相应的属性和展示效果,以及适合场景:
## 沉浸式状态栏 基于anroid5.0开发适配
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {}
### SYSTEM_UI_FLAG_FULLSCREEN 全屏 无系统状态栏(时间 电量一类的)
getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_FULLSCREEN);
### View.SYSTEM_UI_FLAG_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE 全屏 无系统状态栏 且无标题(下拉显示)
### View.SYSTEM_UI_FLAG_FULLSCREEN
| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
| View.SYSTEM_UI_FLAG_LAYOUT_STABLE
| View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_HIDE_NAVIGATION // 全屏 无系统状态栏(下拉显示) 且无标题,无虚拟按键 --适合游戏
### View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
| View.SYSTEM_UI_FLAG_LAYOUT_STABLE
getWindow().setStatusBarColor(Color.TRANSPARENT); // 非全屏 有标题 有系统状态栏 跟主页颜色一致
### getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
| View.SYSTEM_UI_FLAG_LAYOUT_STABLE);
getWindow().setStatusBarColor(Color.TRANSPARENT);
getSupportActionBar().hide(); // 全屏 沉浸式 无标题 有系统状态栏 跟主页颜色一致
### getSupportActionBar().hide(); 也可在theme中设置 noActionBar主题
使用以上方法可以满足大部分需求,在少数情况下,会发现 状态栏背景 跟状态栏的文字颜色一致或相似,导致状态栏的文字显示效果极差,根本看不出来状态栏,这种情况下,没找到太好的办法解决,所以我选择使用第三方库(immersionbar)的办法。
implementation 'com.gyf.immersionbar:immersionbar:3.0.0'
常用方法:
ImmersionBar.with(this)
//.barColor(R.color.color_tab_normal) // 设置导航栏背景色
//.hideBar(BarHide.FLAG_HIDE_BAR) //隐藏状态栏或导航栏或两者,不写默认不隐藏
.statusBarDarkFont(true) // 设置导航栏字体为深色
.fitsSystemWindows(true) // 解决状态栏和布局重叠问题,任选其一,默认为 false,当为 true 时一定要指定 statusBarColor(),不然状态栏为透明色,还有一些重载方法
.init();
方法二:
解决状态栏跟布局重叠的问题,可以在布局的根节点下添加:
android:fitsSystemWindows="true"
也可以解决问题