SystemUI WindowInsets StatusBar NavgationBar fitSystemWindows
setSystemUiVisibility
Android从4.4开始,SystemUI的形态就一直在随着市场的需求在不断的完善,直到Android 7.0关于SystemUI的API才变得完善
Flags版本线索
Android 2.3(API 9)
// 全屏布局且隐藏状态栏:
getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
// 全屏布局,不隐藏状态栏:
getWindow().addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN
| WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
Android 3.0(API 11)
添加 View.setSystemUiVisibility方法和两个FlagsView.STATUS_BAR_VISIBLE和View.STATUS_BAR_HIDDEN两个Flag控制StatusBar的显示与隐藏
//显示
getWindow().getDecorView().setSystemUiVisibility(View.STATUS_BAR_VISIBLE);
//隐藏
getWindow().getDecorView().setSystemUiVisibility(View.STATUS_BAR_HIDDEN);
Android 4.0(JellyBean API 14)
添加 导航栏NavigationBar,
View.STATUS_BAR_HIDDEN 改名成 View.SYSTEM_UI_FLAG_LOW_PROFILE
View.STATUS_BAR_VISIBLE 改名成 View.SYSTEM_UI_FLAG_VISIBLE
View.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LOW_PROFILE)
View.setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION)
SYSTEM_UI_FLAG_LOW_PROFILE: 不隐藏状态栏和导航栏,只隐藏部分图标,但是电量图标不被隐藏
SYSTEM_UI_FLAG_HIDE_NAVIGATION:隐藏NavigationBar,若有用户操作,状态将会被系统清除,显示出导航栏
Android 4.1(JellyBean API 16)
//全屏显示,隐藏状态栏和导航栏,等同于 WindowManager.LayoutParams.FLAG_FULLSCREEN
View.SYSTEM_UI_FLAG_FULLSCREEN
//需要配合其他Flags使用,防止状态栏或者导航栏消失和显示带来的界面变化
View.SYSTEM_UI_FLAG_LAYOUT_STABLE
//Activity全屏显示,但状态栏不会被隐藏覆盖,状态栏依然可见,Activity顶端布局部分会被状态遮住
View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
//使内容布局到NavigationBar之下,可以配合SYSTEM_UI_FLAG_HIDE_NAVIGATION使用防止跳动
View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION:
Android 5.0(Lollipop API 21)
//添加Flag, 表示需要允许可以在SystemUI下绘制背景
WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS
//源码显示,如果设置FLAG_TRANSLUCENT_STATUS,会导致FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS
//失效,实现沉浸式状态栏需要clearFlags(FLAG_TRANSLUCENT_STATUS)
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS)
getWindow().addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS)
//添加方法控制状态栏和导航栏颜色
getWindow().setStatusBarColor(int color)
getWindow().setNavigationBarColor(int color)
Android 6.0 (M API 23)
//表示图标是深色的,控制状态栏和导航栏图标和文字颜色
View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR
View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR
Android 5.0上虽然支持设置导航栏和状态栏的颜色自定义,但系统的图标颜色是不可改变的,默认的系统图标是浅色的,不同厂商的颜色不太一致,如果刚好app的颜色设置和系统图标颜色相近,将看不清系统图标,6.0上添加Light模式,改变状态栏和导航栏上图标和字体的颜色
Android 9.0 (P API 28)
displayCutout 刘海屏兼容