我们在开发游戏的时候一般都是全屏显示,但是在操作下拉显示状态栏,切后台之后再切回来发现状态栏还存在,并没有消失。
在 Android 4.1(API 级别 16)及更高版本中隐藏状态栏可以使用setSystemUiVisibility()
setSystemUiVisibility()
在单个视图级别设置界面标记;这些设置会聚合到窗口级别。与使用 WindowManager
标记相比,使用 setSystemUiVisibility()
设置界面标记让您可以更精细地控制系统栏。
int flag = View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION // hide | View.SYSTEM_UI_FLAG_FULLSCREEN // hide status bar | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY;
getWindow().getDecorView().setSystemUiVisibility(flag);
setSystemUiVisibility的相关属性
View.SYSTEM_UI_FLAG_HIDE_NAVIGATION //隐藏导航栏 View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION View.SYSTEM_UI_LAYOUT_FLAGS View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN //全屏,状态栏会盖在布局上 View.SYSTEM_UI_FLAG_FULLSCREEN //全屏,状态栏和导航栏不显示 View.SYSTEM_UI_FLAG_VISIBLE //显示状态栏和导航栏 View.SYSTEM_UI_FLAG_LAYOUT_STABLE // 保持View Layout不变,隐藏状态栏或者导航栏后,View不会拉伸 View.SYSTEM_UI_FLAG_LOW_PROFILE //状态栏:低能显示状态,状态栏上一些图标显示会被隐藏 View.SYSTEM_UI_FLAG_IMMERSIVE //只有当设置了SYSTEM_UI_FLAG_HIDE_NAVIGATION才起作用。如果没有设置,任意的View相互动作都退出SYSTEM_UI_FLAG_HIDE_NAVIGATION模式。如果设置就不会退出 View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY //只有当设置了SYSTEM_UI_FLAG_FULLSCREEN | SYSTEM_UI_FLAG_HIDE_NAVIGATION 时起作用。如果没有设置,任意的View相互动作都退出SYSTEM_UI_FLAG_FULLSCREEN | SYSTEM_UI_FLAG_HIDE_NAVIGATION模式
请注意以下几点:
- 界面标志被清除后(例如,离开 Activity),如果您希望再次隐藏这些栏,应用需要重置这些标志。请参阅响应界面可见性更改,其中探讨了如何监听界面可见性更改,以便您的应用相应地做出响应。
- 在不同的位置设置界面标记会产生不同的效果。如果您在 Activity 的
onCreate()
方法中隐藏系统栏,那么当用户按主屏幕按钮时,系统栏会重新出现。当用户重新打开 Activity 后,系统不会调用onCreate()
,因此系统栏仍保持可见。如果您希望在用户进入和退出 Activity 时继续保留系统界面更改,请在onResume()
或onWindowFocusChanged()
中设置界面标记。 - 要使方法
setSystemUiVisibility()
生效,您调用它时所在的视图必须可见。 - 离开该视图会导致系统清除使用
setSystemUiVisibility()
设置的标志。