我們在開發遊戲的時候一般都是全屏顯示,但是在操作下拉顯示狀态欄,切背景之後再切回來發現狀态欄還存在,并沒有消失。
在 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 的
方法中隐藏系統欄,那麼當使用者按主螢幕按鈕時,系統欄會重新出現。當使用者重新打開 Activity 後,系統不會調用onCreate()
,是以系統欄仍保持可見。如果您希望在使用者進入和退出 Activity 時繼續保留系統界面更改,請在onCreate()
或onResume()
中設定界面标記。onWindowFocusChanged()
- 要使方法
生效,您調用它時所在的視圖必須可見。setSystemUiVisibility()
- 離開該視圖會導緻系統清除使用
設定的标志。setSystemUiVisibility()