android状态栏半透明灰色,Android7.0沉浸式状态栏蒙灰问题完美解决
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沉浸式状态栏蒙灰问题完美解决相关推荐
- Android 9.0 10.0 沉浸式状态栏导致导航栏状态栏灰色蒙层的解决方案
1.概述 在10.0的系统产品开发中,在app开发中,沉浸式状态栏也是常有的样式,但是设置沉浸式状态栏后,会导致状态栏和导航栏会有灰色蒙层的问题存在 解决方案: DecorView是整个Window界 ...
- android朋友圈评论功能兼容沉浸式状态栏,九宫格图片显示
android朋友圈评论功能,沉浸式状态栏,九宫格图片显示器,上拉加载下拉刷新功能,可直接用到项目中 背景 在前两个项目开发过程中用到了朋友圈这个功能,包含了评论回复.九宫格图片及大图展示展示,上拉加 ...
- android 9.0去掉状态栏,安卓9.0沉浸式状态栏
首先我们来了解一下几个设置沉浸式状态栏的基础属性: 1.View.SYSTEM_UI_FLAG_LOW_PROFILE:低调模式, 会隐藏不重要的状态栏图标: 2.View.SYSTEM_UI_FLA ...
- Android 状态栏工具类(实现沉浸式状态栏/变色状态栏)
From:写代码的猴子 这是一个为Android App 设置状态栏的工具类, 可以在4.4及其以上系统中实现 沉浸式状态栏/状态栏变色,支持设置状态栏透明度,满足你司设计师的各种要求(雾). 在此之 ...
- Android 状态栏工具类(实现沉浸式状态栏 / 变色状态栏)
这是一个为Android App 设置状态栏的工具类, 可以在4.4及其以上系统中实现 沉浸式状态栏/状态栏变色,支持设置状态栏透明度,满足你司设计师的各种要求(雾). 在此之前我写过一篇Androi ...
- android华为隐藏底部虚拟按键,沉浸式状态栏/华为虚拟按键隐藏
19版本以上Android可以自己实现沉浸式状态栏的设置 1.创建values-v21文件夹(为了匹配低版本) 在style文件中设置: 设置了这两个属性状态栏就能设置为透明的.但是需要注意的是,这个 ...
- android 沉浸式状态栏导致布局被遮挡,沉浸式状态栏导致华为手机虚拟按钮被遮挡的解决办法...
使用了沉浸式状态栏可以让应用给人浑然天成的感觉,是比较好的用户体验,从android 4.4 版本后才能使用城近视状态栏,具体表现是,4.4上是渐变色,5.0以后是全透明. 效果如下: 效果还是挺好的 ...
- StatusBarUtil 状态栏工具类(实现沉浸式状态栏/变色状态栏)
这是一个为Android App 设置状态栏的工具类, 可以在4.4及其以上系统中实现 沉浸式状态栏/状态栏变色,支持设置状态栏透明度,满足你司设计师的各种要求(雾). 本着不重复造轮子的原则,在网上 ...
- android 沉浸式状态栏字体颜色,改变Android状态栏字体颜色和实现沉浸式状态栏
目前已知的改变Android状态栏字体颜色的方法只有3种情况下可以实现,分别是手机是MIUI系统.魅族手机以及Android6.0.改变颜色方法分别如下: * 改变小米的状态栏字体颜色为黑色, 要求M ...
最新文章
- php excel 追加写入,phpexcel写入追加已有的excel文件
- C++数据结构链表的基本操作
- ccls提示找不到文件
- Java基础day22
- webpack 4.14.0 版本太高,无法执行相关指令,(将webpack高版本切换到低版本)--直接覆盖
- 什么是互联网大厂_2020阿里、腾讯、字节跳动等14家互联网大厂薪资水平大汇总...
- mysql5.7 解压版 中文乱码_MySQL 5.7解压版安装、卸载及乱码问题的图文解决方法...
- C语言入门经典(第5版)
- 计算机二级公共知识web,全国计算机等级考试二级web大纲
- AI虚拟偶像正崛起,是否可以取代你的idol?
- 63岁老太太不远千里来传销 被玩坏的IPFS矿机游戏
- 隐含马尔可夫 隐含状态_隐含可读性
- Can't open /dev/sda3 exclusively. Mounted filesystem?解决办法
- html表格制作旅游网页,简单实用的网页表格特效_html
- 计算机专业用什么轴的键盘,机械键盘什么轴好
- python自动识别简单图片中的文字
- apa引用要在文中吗_引用还是抄袭?80%的大学生都搞不懂的学术写作!
- maya通过python输出fbx_Python:Maya2WRL简单导出脚本(source included)
- 【Java大数据】Java基础
- 微信域名拦截自动检测软件
热门文章
- 【Socket网络编程】4.tcp和udp的客户端和服务端收发流程
- fatal error C1189: #error : Building MFC application with /MD[d]
- Java中String类的常见面试题
- Elasticsearch基础教程ES
- 从零开始学习jQuery (十一) 实战表单验证与自动完成提示插件
- 【java开发系列】—— java输入输出流
- 在react-router中进行代码拆分
- 落地华东总部、上线创新云、签约AIoT产业基金……京东云南京“新动作”
- c++ primer 5th 笔记:第二章
- 创建一个提供数据 API 的 Node.js 网站