在Android7.0以上版本的手机中,发现沉浸式状态栏不好使了,用以前的写法,状态栏会有一层黑色的半透明遮罩
具体现象
原因
在7.0以上,状态栏颜色是由系统动态运算得出的,因此我们给它设置透明色也是没用的。
解决办法
加入判断逻辑,通过getWindow().getDecorView()可以获取到这个DecorView类的对象,然后通过反射修改这个对象的成员mSemiTransparentStatusBarColor变量值,这个变量值就是运算得出的状态栏颜色。
具体代码如下:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
try {
Class decorViewClazz = Class.forName("com.android.internal.policy.DecorView");
Field field = decorViewClazz.getDeclaredField("mSemiTransparentStatusBarColor");
field.setAccessible(true);
field.setInt(getWindow().getDecorView(), Color.TRANSPARENT); //改为透明
} catch (Exception e) {
e.printStackTrace();
}
}