目录
简介
下面是setSystemUiVisibility可以设置的一部分flag
- SYSTEM_UI_FLAG_LOW_PROFILE 弱化状态栏和导航栏的图标
- SYSTEM_UI_FLAG_HIDE_NAVIGATION 隐藏导航栏,用户点击屏幕会显示导航栏
- SYSTEM_UI_FLAG_FULLSCREEN 隐藏状态栏
- SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION 拓展布局到导航栏后面
- SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN 拓展布局到状态栏后面
- SYSTEM_UI_FLAG_LAYOUT_STABLE 稳定的布局,不会随系统栏的隐藏、显示而变化
- SYSTEM_UI_FLAG_IMMERSIVE 沉浸模式,用户可以交互的界面
- SYSTEM_UI_FLAG_IMMERSIVE_STICKY 沉浸模式,用户可以交互的界面。同时,用户上下拉系统栏时,会自动隐藏系统栏
测试代码
/** * systemUiVisibility 单个测试代码 */ private void systemUiVisibilityTest(int flag) { Log.d(TAG, "showFullScreenTwo fullScreenTwo : " + fullScreenTwo); int options = getWindow().getDecorView().getSystemUiVisibility(); if (fullScreenTwo) { options &= ~flag; } else { options |= flag; } getWindow().getDecorView().setSystemUiVisibility(newUiOptions); fullScreenTwo = !fullScreenTwo; return; }
flag详解
下面单独讲解各个flag的意义
SYSTEM_UI_FLAG_LOW_PROFILE
设置状态栏和导航栏中的图标变小,变模糊或者弱化其效果。这个标志一般用于游戏,电子书,视频,或者不需要去分散用户注意力的应用软件。
PS:在我的MTK Android 9.0设备上没有什么变化。
SYSTEM_UI_FLAG_HIDE_NAVIGATION
隐藏导航栏,点击屏幕任意区域,导航栏将重新出现,并且不会自动消失。
PS:通过测试
SYSTEM_UI_FLAG_FULLSCREEN
隐藏状态栏,点击屏幕区域不会出现,需要从状态栏位置下拉才会出现。
PS: 通过测试
SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
将布局内容拓展到导航栏的后面。
PS:通过测试
SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
将布局内容拓展到状态的后面。
PS:在我的MTK Android 9.0机器上测试,这个效果跟SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION一样。不知道是不是我这代码的底层修改过。
SYSTEM_UI_FLAG_LAYOUT_STABLE
稳定布局,主要是在全屏和非全屏切换时,布局不要有大的变化。一般和View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN、View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION搭配使用。同时,android:fitsSystemWindows要设置为true。
PS:单独测试没有啥效果,组合测试暂时没有验证。
SYSTEM_UI_FLAG_IMMERSIVE
使状态栏和导航栏真正的进入沉浸模式,即全屏模式,如果没有设置这个标志,设置全屏时,我们点击屏幕的任意位置,就会恢复为正常模式。所以,View.SYSTEM_UI_FLAG_IMMERSIVE都是配合View.SYSTEM_UI_FLAG_FULLSCREEN和View.SYSTEM_UI_FLAG_HIDE_NAVIGATION一起使用的。
PS:单独测试没有啥效果,组合测试暂时没有验证。
SYSTEM_UI_FLAG_IMMERSIVE_STICKY
它的效果跟View.SYSTEM_UI_FLAG_IMMERSIVE一样。但是,它在全屏模式下,用户上下拉状态栏或者导航栏时,这些系统栏只是以半透明的状态显示出来,并且在一定时间后会自动消息。
PS:单独测试没有啥效果,组合测试暂时没有验证。
参考文章