Android SystemUI的一些Flags

2020-02-11  本文已影响0人  逃跑的计划中

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方法和两个Flags​View.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 刘海屏兼容

上一篇下一篇

猜你喜欢

热点阅读