天天看點

安卓隐藏狀态欄

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

在 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()

     設定的标志。