1. 程式人生 > 其它 >安卓隱藏狀態列

安卓隱藏狀態列

我們在開發遊戲的時候一般都是全屏顯示,但是在操作下拉顯示狀態列,切後臺之後再切回來發現狀態列還存在,並沒有消失。

在 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()設定的標誌。