Android System UI 屬性
關(guān)于操作SystemUI,包括:StatusBar、ActionBar、NavigationBar
通過(guò)View Mode and Layout
可以通過(guò)View的一些常量來(lái)改變狀態(tài)欄或者屏幕的一些特性(View.setSystemUiVisibility(UiOptions)(API 11)),具體如下(隱藏系統(tǒng)欄和低能模式會(huì)在有app bar時(shí)失效):
View.setSystemUiVisibility(int visibility)中,visibility是Mode與Layout任意取值的組合,可傳入的實(shí)參為:
SystemUiVisibility Mode
-
SYSTEM_UI_FLAG_VISIBLE0請(qǐng)求顯示系統(tǒng)UI,默認(rèn)狀態(tài)
-
SYSTEM_UI_FLAG_LOW_PROFILE0x00000001低能模式,狀態(tài)欄上的一些圖標(biāo)會(huì)被隱藏,游戲、閱讀、視頻播放等沉浸式應(yīng)用會(huì)需要
-
SYSTEM_UI_FLAG_HIDE_NAVIGATION0x00000002請(qǐng)求隱藏底部導(dǎo)航欄
-
SYSTEM_UI_FLAG_FULLSCREEN0x00000004請(qǐng)求全屏顯示,狀態(tài)欄會(huì)被隱藏,底部導(dǎo)航欄不會(huì)被隱藏,效果和
WindowManager.LayoutParams.FLAG_FULLSCREEN相同 -
SYSTEM_UI_FLAG_IMMERSIVE0x00000800這個(gè)flag只有當(dāng)設(shè)置了
SYSTEM_UI_FLAG_HIDE_NAVIGATION才起作用。如果沒(méi)有設(shè)置這個(gè)flag,任意的View相互動(dòng)作都退出SYSTEM_UI_FLAG_HIDE_NAVIGATION模式。如果設(shè)置就不會(huì)退出 -
SYSTEM_UI_FLAG_IMMERSIVE_STICKY0x00001000這個(gè)flag只有當(dāng)設(shè)置了
SYSTEM_UI_FLAG_FULLSCREEN|SYSTEM_UI_FLAG_HIDE_NAVIGATION時(shí)才起作用。如果沒(méi)有設(shè)置這個(gè)flag,任意的View相互動(dòng)作都?jí)耐顺?code>SYSTEM_UI_FLAG_FULLSCREEN |SYSTEM_UI_FLAG_HIDE_NAVIGATION模式。如果設(shè)置就不受影響 -
SYSTEM_UI_FLAG_LIGHT_STATUS_BAR0x00002000狀態(tài)欄淺色背景模式,文字為黑色,Android 6.0以前(api < 23)不支持
SystemUiVisibility Layout
-
SYSTEM_UI_FLAG_LAYOUT_STABLE0x00000100請(qǐng)求系統(tǒng)UI布局穩(wěn)定狀態(tài)
-
SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN0x00000400讓View全屏顯示,Layout會(huì)被拉伸到StatusBar下面,不包含NavigationBar
-
SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION0x00000200讓View全屏顯示,Layout會(huì)被拉伸到NavigationBar下面
通過(guò)Window flag 和 Theme(通過(guò)設(shè)置Widnow flag修改屬性)
WindowManager.LayoutParams.FLAG_FULLSCREEN:隱藏狀態(tài)欄全屏顯示W(wǎng)indow并且會(huì)拉伸。可以通過(guò)theme中的android.R.attr#windowFullscreen來(lái)控制。WindowManager.LayoutParams.FLAG_LAYOUT_IN_OVERSCAN:允許window contents擴(kuò)展到屏幕中的縮放區(qū)域內(nèi),如果有縮放區(qū)域的話。 可以通過(guò)theme中的android.R.attr#windowOverscan來(lái)控制。WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS:使?fàn)顟B(tài)欄透明同時(shí)會(huì)拉伸window到全屏的狀態(tài)(保留NavigationBar高度),假如有ActionBar,ActionBar依舊會(huì)顯示??梢酝ㄟ^(guò)theme中的android.R.attr#windowTranslucentStatus來(lái)控制。WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION:NavigationBar透明同時(shí)會(huì)拉伸Window到全屏(不保留StatusBar和NavigationBar的高度)??梢酝ㄟ^(guò)theme中的android.R.attr#windowTranslucentNavigation來(lái)控制。
Window Feature
通過(guò)requestFeature來(lái)設(shè)置Window相關(guān)的顯示狀態(tài)。
getWindow().requestFeature(Window.FEATURE_ACTION_BAR_OVERLAY);
常見(jiàn)Flag:
Window.FEATURE_ACTION_BAR_OVERLAY:請(qǐng)求ActionBar覆蓋在window content上面。
Window.FEATURE_NO_TITLE:去除屏幕頂部的標(biāo)題欄