控制导航栏状态可用如下方法:
getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_FULLSCREEN);
其中View.SYSTEM_UI_FLAG_FULLSCREEN为属性标志,属性标志共有如下几种:
-
SYSTEM_UI_FLAG_LOW_PROFILE
用于弱化导航栏存在,一般会隐藏导航栏和状态栏中的图标或颜色变暗,具体效果分机型
-
SYSTEM_UI_FLAG_HIDE_NAVIGATION
隐藏导航栏一次,点击屏幕会再次出现(消耗点击事件),且出现后不会自动消失
-
SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
布局内容会延伸到导航栏的后面。(导航栏会在布局前半透明显示)
-
SYSTEM_UI_FLAG_FULLSCREEN
隐藏导航栏状态栏,且点击屏幕不会出现(不消耗点击事件),需手动下拉才会出现,出现后几秒会自动消失(其余出现后消失情况(比如软键盘弹出后)分机型)
-
SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
布局内容会延伸到状态栏导航栏后面(全屏显示),状态栏导航栏会透明显示在布局的上面。
-
SYSTEM_UI_FLAG_LAYOUT_STABLE
-
稳定布局,主要用于全屏非全屏切换时使布局保持不变(搭配View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN、View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION使用)
-
可在xml文件中直接设置android:fitsSystemWindows="true"属性
-
设置后一般在全屏布局上也会留出导航栏的位置
-
-
SYSTEM_UI_FLAG_IMMERSIVE
-
实现沉浸式全屏,点击屏幕任意位置并不会使导航栏状态栏出现(未设置此属性时,FLAG_HIDE_NAVIGATION模式点击屏幕会使得状态栏恢复回来,消耗一个点击事件)
-
一般搭配View.SYSTEM_UI_FLAG_FULLSCREEN和View.SYSTEM_UI_FLAG_HIDE_NAVIGATION同时使用
-
用户上下拉状态栏时,状态栏会显示出来并固定在下面
-
-
SYSTEM_UI_FLAG_IMMERSIVE_STICKY
-
效果同上,但全屏模式下,用户上下拉状态栏时,状态栏会以透明的形式显示出来,并一定时间后会自动消失。
-
同搭配View.SYSTEM_UI_FLAG_FULLSCREEN和View.SYSTEM_UI_FLAG_HIDE_NAVIGATION等同时使用
-
根据上面总结,通常隐藏导航栏且有效的写法为:
public void hideNavigationBar() {
int uiOptions = View.SYSTEM_UI_FLAG_LAYOUT_STABLE
| View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
| View.SYSTEM_UI_FLAG_FULLSCREEN;
if (getWindow() != null) {
getWindow().getDecorView().setSystemUiVisibility(uiOptions);
}
}
参考链接:Android setSystemUiVisibility详解_QQxiaoqiang1573的博客-优快云博客_android setsystemuivisibility