Android透明状态栏&颜色适配 Api19~27

 

实验环境:

原生 Android 4.4(API19)、5.0(API21)、6.0(API23)、8.1(API27)


参数单独使用测试效果

1、true

①API Level: >= 19

②功能:可以让布局内容延伸到状态栏上面去、状态栏变为透明或全透明

③功能差异:API=19时状态栏全透明,API>=21时状态栏半透明;不同的国产Api还有一些自己的实现(比如5.0以上也是透明效果)

④优先级:A

 

2、 @android:color/transparent

①API Level: >= 21

②功能:改变状态栏颜色

③功能差异:无

④优先级:B

 

3、@color/n_purple

①API Level:无

②功能:改变状态栏颜色

③功能差异:API Level >= 21 以上才生效

④优先级:C

Android透明状态栏&颜色适配 Api19~27_第1张图片

4、true

①API Level:>=23

②功能:状态栏图标变为黑色

③优先级:直接生效

5、 android:fitsSystemWindows="true"

①API Level:>=23

②功能:在api19以上在布局文件和状态栏之间设置一下padding。如果之前设置了windowTranslucentStatus,那么设置这个属性后可以保证内容和状态栏不重叠。

③优先级:直接生效

 

 

 

【优先级的问题】 A>B>C

在我的测试环境下:在同时设置了有优先级的属性后,只有优先级最高属性才会生效

 

 

实际开发参数组合效果

经验小结

Android透明状态栏&颜色适配 Api19~27_第2张图片

附录1:全透明状态栏代码(api>=21)

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
      getWindow().setStatusBarColor(Color.TRANSPARENT);
      //去除效果不佳的半透明状态栏(如果设置了的话)
      getWindow().clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
      //这里的原理是直接设置了完全透明的状态栏,并且保留了内容延伸的效果
      //全屏显示设置新的状态栏:延伸内容到状态栏
            getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
}

 

附录2:api19的透明状态栏设置参考

https://blog.csdn.net/jdsjlzx/article/details/41643587

 

其他参考文章

http://yifeng.studio/2017/02/19/android-statusbar/

http://mobile.51cto.com/ahot-559988.htm

https://blog.csdn.net/chenyuan_jhon/article/details/62440877

https://www.jianshu.com/p/0acc12c29c1b

http://codpoe.me/2016/08/08/translucent-statusbar/

 

你可能感兴趣的:(Android,基础)