Android上透明狀態列,全屏顯示以及沉浸模式
在Android上為了實現全屏顯示,透明狀態列,沉浸模式等效果,往往需要我們掌握和系統UI顯示隱藏相關的各種Flag。Android上API版本混亂,各種Flag林立。今天我們就來聊聊這些Flags。
在Android Kitkat中引入Immersive Mode
相關API
Window#setFlags
View#setSystemUiVisibility (Android 3.0開始提供)
相關Flag·
WindowManager.LayoutParams.FLAG_FULLSCREEN
隱藏狀態列
View.SYSTEM_UI_FLAG_VISIBLE API 14
預設標記
View.SYSTEM_UI_FLAG_LOW_PROFILE API 14
低調模式, 會隱藏不重要的狀態列圖示
保持整個View穩定, 常和控制System UI懸浮, 隱藏的Flags共用, 使View不會因為System UI的變化而重新layout
View.SYSTEM_UI_FLAG_FULLSCREEN API 16
狀態列隱藏,效果同設定WindowManager.LayoutParams.FLAG_FULLSCREEN
View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN API 16
檢視延伸至狀態列區域,狀態列上浮於檢視之上
隱藏導航欄
View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION API 16
檢視延伸至導航欄區域,導航欄上浮於檢視之上
View.SYSTEM_UI_FLAG_IMMERSIVE API 19
沉浸模式, 隱藏狀態列和導航欄, 並且在第一次會彈泡提醒, 並且在狀態列區域滑動可以呼出狀態列(這樣會系統會清楚之前設定的View.SYSTEM_UI_FLAG_FULLSCREEN或View.SYSTEM_UI_FLAG_HIDE_NAVIGATION標誌)。
使之生效,需要和
View.SYSTEM_UI_FLAG_FULLSCREEN,
View.SYSTEM_UI_FLAG_HIDE_NAVIGATION中的一個或兩個同時設定。
View.SYSTEM_UI_FLAG_IMMERSIVE_STIKY
API 19
與上面唯一的區別是, 撥出隱藏的狀態列後不會清除之前設定的
View.SYSTEM_UI_FLAG_FULLSCREEN或View.SYSTEM_UI_FLAG_HIDE_NAVIGATION標誌,在一段時間後將再次隱藏系統欄)