关于状态栏颜色与官方新Layout对状态栏颜色的自适应更改

关于状态栏颜色与官方新Layout对状态栏颜色的自适应更改_第1张图片

第一个颜色值为默认颜色值,会影响到某些官方提供的主题的背景色,如toolbar的默认主题背景色。

第二个颜色值为状态栏默认颜色值,新出的Layout在设置了fitSystemWindow属性后会将状态栏更改为这个颜色。

第三个颜色值为某些组件的默认字体颜色,如AlertDialog的按钮颜色,ProgressDialog的转圈图颜色。

关于状态栏颜色与官方新Layout对状态栏颜色的自适应更改_第2张图片

第四个值为安卓5.0及以上特有的属性,可以通过它设置状态栏的颜色,开启状态栏透明后就是它会变成透明。


fitSystemWindow属性在默认情况下(新出的布局,如DrawerLayout、CoordinatorLayout等重写了相关函数,实现了额外功能)会根据系统组件(如状态栏、底部导航栏、输入法等)动态在View里面加入相应大小的Pading值。

新出的布局,如DrawerLayout、CoordinatorLayout等,在设置了fitSystemWindow属性后,会根据需要更改状态栏等系统组件的颜色,。它提供的状态栏颜色由colorPrimaryDark提供等配置。如会将状态栏颜色更改为style里面的colorPrimaryDark的值。


安卓4.4对于状态栏的修改很单调。只能将状态栏更改为透明模式,并且组件上移占用statusbar的空间,状态栏颜色等同于顶部组件颜色。将顶部组件设置为fitSystemWindow属性后可以在组件中添加相应的padingTop值,达到下移回来的效果。状态栏背景色依然为该组件颜色。

window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS
        | WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);


安卓5.0后增加了额外的方法(4.4的方法依然兼容),可以直接设置状态栏的颜色、设置是否占用状态栏空间。

getWindow.setStatusBarColor(Color.TRANSPARENT);
getWindow.setNavigationBarColor(Color.TRANSPARENT);
getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);
getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);


安卓6.0又增加了可以将状态栏字体颜色更改为黑色,以适应浅色背景,所以只有6.0的系统状态栏可以舒适的使用浅色背景色。

getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_VISIBLE);

你可能感兴趣的:(Android界面)