DecorView是Window的顶层view, 也就是说我们所有的控件都是包含在这个view中的. android7.0之前这个类是PhoneWindow的一个内部类, 7.0之后是一个独立的类, 同时也增加了一些新的属性和方法.

先看2张图片:

我们想要实现第2张图的效果, 应当在style中添加属性 true 发现出来的效果是第一种, 上面竟然蒙了一层半透明view, 要想去除这层view也很简单, 我们一般会在setContentView()之前添加一下代码:

getWindow().clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);   //去除半透明状态栏

getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);  //一般配合fitsSystemWindows()使用, 或者在根部局加上属性android:fitsSystemWindows="true", 使根部局全屏显示

getWindow().setStatusBarColor(Color.TRANSPARENT);

但是android7.0之后有时候我们通过上述方法还是不能去除蒙灰(原因尚不明确), 下面是7.0在DecorView中新添加的一部分源码

DecorView(Context context, int featureId, PhoneWindow window, WindowManager.LayoutParams params) {

......

mForceWindowDrawsStatusBarBackground =         context.getResources().getBoolean(R.bool.config_forceWindowDrawsStatusBarBackground)

&& context.getApplicationInfo().targetSdkVersion >= N;

mSemiTransparentStatusBarColor = context.getResources().getColor(R.color.system_bar_background_semi_transparent, null);

......

}

private int calculateStatusBarColor() {

int flags = mWindow.getAttributes().flags;

return (flags & FLAG_TRANSLUCENT_STATUS) != 0 ? mSemiTransparentStatusBarColor : (flags &             FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS) != 0 ? mWindow.mStatusBarColor : Color.BLACK;

从源码可以看到androidx.x之后会强制绘制statusbar的背景色, 而且在其他条件都满足情况下还会加上半透明效果, 所以如果第一种方法去除不掉半透明的情况下可以通过反射拿到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) {}

}

getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);//7.0透明状态栏

//透明状态栏

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {

//            getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_FULLSCREEN);//完全隐藏状态栏

getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN|View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);

}

------>>在setContentView()之前通过反射修改mSemiTransparentStatusBarColor值

android状态栏半透明灰色,Android7.0沉浸式状态栏蒙灰问题完美解决相关推荐

  1. Android 9.0 10.0 沉浸式状态栏导致导航栏状态栏灰色蒙层的解决方案

    1.概述 在10.0的系统产品开发中,在app开发中,沉浸式状态栏也是常有的样式,但是设置沉浸式状态栏后,会导致状态栏和导航栏会有灰色蒙层的问题存在 解决方案: DecorView是整个Window界 ...

  2. android朋友圈评论功能兼容沉浸式状态栏,九宫格图片显示

    android朋友圈评论功能,沉浸式状态栏,九宫格图片显示器,上拉加载下拉刷新功能,可直接用到项目中 背景 在前两个项目开发过程中用到了朋友圈这个功能,包含了评论回复.九宫格图片及大图展示展示,上拉加 ...

  3. android 9.0去掉状态栏,安卓9.0沉浸式状态栏

    首先我们来了解一下几个设置沉浸式状态栏的基础属性: 1.View.SYSTEM_UI_FLAG_LOW_PROFILE:低调模式, 会隐藏不重要的状态栏图标: 2.View.SYSTEM_UI_FLA ...

  4. Android 状态栏工具类(实现沉浸式状态栏/变色状态栏)

    From:写代码的猴子 这是一个为Android App 设置状态栏的工具类, 可以在4.4及其以上系统中实现 沉浸式状态栏/状态栏变色,支持设置状态栏透明度,满足你司设计师的各种要求(雾). 在此之 ...

  5. Android 状态栏工具类(实现沉浸式状态栏 / 变色状态栏)

    这是一个为Android App 设置状态栏的工具类, 可以在4.4及其以上系统中实现 沉浸式状态栏/状态栏变色,支持设置状态栏透明度,满足你司设计师的各种要求(雾). 在此之前我写过一篇Androi ...

  6. android华为隐藏底部虚拟按键,沉浸式状态栏/华为虚拟按键隐藏

    19版本以上Android可以自己实现沉浸式状态栏的设置 1.创建values-v21文件夹(为了匹配低版本) 在style文件中设置: 设置了这两个属性状态栏就能设置为透明的.但是需要注意的是,这个 ...

  7. android 沉浸式状态栏导致布局被遮挡,沉浸式状态栏导致华为手机虚拟按钮被遮挡的解决办法...

    使用了沉浸式状态栏可以让应用给人浑然天成的感觉,是比较好的用户体验,从android 4.4 版本后才能使用城近视状态栏,具体表现是,4.4上是渐变色,5.0以后是全透明. 效果如下: 效果还是挺好的 ...

  8. StatusBarUtil 状态栏工具类(实现沉浸式状态栏/变色状态栏)

    这是一个为Android App 设置状态栏的工具类, 可以在4.4及其以上系统中实现 沉浸式状态栏/状态栏变色,支持设置状态栏透明度,满足你司设计师的各种要求(雾). 本着不重复造轮子的原则,在网上 ...

  9. android 沉浸式状态栏字体颜色,改变Android状态栏字体颜色和实现沉浸式状态栏

    目前已知的改变Android状态栏字体颜色的方法只有3种情况下可以实现,分别是手机是MIUI系统.魅族手机以及Android6.0.改变颜色方法分别如下: * 改变小米的状态栏字体颜色为黑色, 要求M ...

最新文章

  1. php excel 追加写入,phpexcel写入追加已有的excel文件
  2. C++数据结构链表的基本操作
  3. ccls提示找不到文件
  4. Java基础day22
  5. webpack 4.14.0 版本太高,无法执行相关指令,(将webpack高版本切换到低版本)--直接覆盖
  6. 什么是互联网大厂_2020阿里、腾讯、字节跳动等14家互联网大厂薪资水平大汇总...
  7. mysql5.7 解压版 中文乱码_MySQL 5.7解压版安装、卸载及乱码问题的图文解决方法...
  8. C语言入门经典(第5版)
  9. 计算机二级公共知识web,全国计算机等级考试二级web大纲
  10. AI虚拟偶像正崛起,是否可以取代你的idol?
  11. 63岁老太太不远千里来传销 被玩坏的IPFS矿机游戏
  12. 隐含马尔可夫 隐含状态_隐含可读性
  13. Can't open /dev/sda3 exclusively. Mounted filesystem?解决办法
  14. html表格制作旅游网页,简单实用的网页表格特效_html
  15. 计算机专业用什么轴的键盘,机械键盘什么轴好
  16. python自动识别简单图片中的文字
  17. apa引用要在文中吗_引用还是抄袭?80%的大学生都搞不懂的学术写作!
  18. maya通过python输出fbx_Python:Maya2WRL简单导出脚本(source included)
  19. 【Java大数据】Java基础
  20. 微信域名拦截自动检测软件

热门文章

  1. 【Socket网络编程】4.tcp和udp的客户端和服务端收发流程
  2. fatal error C1189: #error : Building MFC application with /MD[d]
  3. Java中String类的常见面试题
  4. Elasticsearch基础教程ES
  5. 从零开始学习jQuery (十一) 实战表单验证与自动完成提示插件
  6. 【java开发系列】—— java输入输出流
  7. 在react-router中进行代码拆分
  8. 落地华东总部、上线创新云、签约AIoT产业基金……京东云南京“新动作”
  9. c++ primer 5th 笔记:第二章
  10. 创建一个提供数据 API 的 Node.js 网站