【Android】解决修改状态栏颜色不生效的问题(6.0以上)
16lz
2021-01-25
通过设置属性去掉导航栏(百度一下一堆),本文主要是解决一些手机上设置状态栏颜色不生效的问题。
设置状态栏颜色主要通过下列代码
Window window = context.getWindow(); View decorView = window.getDecorView(); int systemUiVisibility = decorView.getSystemUiVisibility() | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE; if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M) { if (!isDarkBackground(color)) { systemUiVisibility |= View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR; } else { systemUiVisibility = systemUiVisibility & ~View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR; } } window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); decorView.setSystemUiVisibility(systemUiVisibility); window.setStatusBarColor(Color.TRANSPARENT);
判断深色和浅色之后,通过设置SYSTEM_UI_FLAG_LIGHT_STATUS_BAR来设置状态栏图标的颜色是黑色还是白色的。
但是有的手机上发现设置这个属性不生效。 (注:或这个属性的时候是黑色的状态栏,非这个状态栏的时候是白色)
经过一番调研之后发现,这个属性的生效不取决于这个SYSTEM_UI_FLAG_LIGHT_STATUS_BAR,还是取决于statusbar的颜色,但是给状态栏设置颜色之后就不是真正的沉浸式状态栏了,那怎么办呢。我们知道Android的颜色是ARGB,第一个属性是透明度,那只要A是透明的,其实颜色设置成什么样子的都是无所谓的。
if (!isDarkBackground(color)) { window.setStatusBarColor(0x00FFFFFF); } else { window.setStatusBarColor(0); }
再加上上述代码,完美解决不同手机上对状态栏颜色设置的问题。
更多相关文章
- Android绘制一个三角形并且可动态改变颜色
- Android(安卓)ImageView的scaleType属性与adjustViewBounds属性
- Android——EditText自定义边框、圆角和其常用属性总结
- android 通知栏背景颜色跟随app导航栏背景颜色变化而变化
- 如何锁定横屏或竖屏
- ListView 自动滚动
- Android(安卓)ColorStateList使用方法
- Android-Dialog风格Activity开发
- Android动画研究