Android System UI 属性
关于操作SystemUI,包括:StatusBar、ActionBar、NavigationBar
通过View Mode and Layout
可以通过View的一些常量来改变状态栏或者屏幕的一些特性(View.setSystemUiVisibility(UiOptions)(API 11)),具体如下(隐藏系统栏和低能模式会在有app bar时失效):
View.setSystemUiVisibility(int visibility)
中,visibility是Mode与Layout任意取值的组合,可传入的实参为:
SystemUiVisibility Mode
-
SYSTEM_UI_FLAG_VISIBLE
0请求显示系统UI,默认状态
-
SYSTEM_UI_FLAG_LOW_PROFILE
0x00000001低能模式,状态栏上的一些图标会被隐藏,游戏、阅读、视频播放等沉浸式应用会需要
-
SYSTEM_UI_FLAG_HIDE_NAVIGATION
0x00000002请求隐藏底部导航栏
-
SYSTEM_UI_FLAG_FULLSCREEN
0x00000004请求全屏显示,状态栏会被隐藏,底部导航栏不会被隐藏,效果和
WindowManager.LayoutParams.FLAG_FULLSCREEN
相同 -
SYSTEM_UI_FLAG_IMMERSIVE
0x00000800这个flag只有当设置了
SYSTEM_UI_FLAG_HIDE_NAVIGATION
才起作用。如果没有设置这个flag,任意的View相互动作都退出SYSTEM_UI_FLAG_HIDE_NAVIGATION
模式。如果设置就不会退出 -
SYSTEM_UI_FLAG_IMMERSIVE_STICKY
0x00001000这个flag只有当设置了
SYSTEM_UI_FLAG_FULLSCREEN
|SYSTEM_UI_FLAG_HIDE_NAVIGATION
时才起作用。如果没有设置这个flag,任意的View相互动作都坏退出SYSTEM_UI_FLAG_FULLSCREEN
|SYSTEM_UI_FLAG_HIDE_NAVIGATION
模式。如果设置就不受影响 -
SYSTEM_UI_FLAG_LIGHT_STATUS_BAR
0x00002000状态栏浅色背景模式,文字为黑色,Android 6.0以前(api < 23)不支持
SystemUiVisibility Layout
-
SYSTEM_UI_FLAG_LAYOUT_STABLE
0x00000100请求系统UI布局稳定状态
-
SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
0x00000400让View全屏显示,Layout会被拉伸到StatusBar下面,不包含NavigationBar
-
SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
0x00000200让View全屏显示,Layout会被拉伸到NavigationBar下面
通过Window flag 和 Theme(通过设置Widnow flag修改属性)
WindowManager.LayoutParams.FLAG_FULLSCREEN
:隐藏状态栏全屏显示Window并且会拉伸。可以通过theme中的android.R.attr#windowFullscreen
来控制。WindowManager.LayoutParams.FLAG_LAYOUT_IN_OVERSCAN
:允许window contents扩展到屏幕中的缩放区域内,如果有缩放区域的话。 可以通过theme中的android.R.attr#windowOverscan
来控制。WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS
:使状态栏透明同时会拉伸window到全屏的状态(保留NavigationBar高度),假如有ActionBar,ActionBar依旧会显示。可以通过theme中的android.R.attr#windowTranslucentStatus
来控制。WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION
:NavigationBar透明同时会拉伸Window到全屏(不保留StatusBar和NavigationBar的高度)。可以通过theme中的android.R.attr#windowTranslucentNavigation
来控制。
Window Feature
通过requestFeature来设置Window相关的显示状态。
getWindow().requestFeature(Window.FEATURE_ACTION_BAR_OVERLAY);
常见Flag:
Window.FEATURE_ACTION_BAR_OVERLAY
:请求ActionBar覆盖在window content上面。
Window.FEATURE_NO_TITLE
:去除屏幕顶部的标题栏