android7.0沉浸式状态栏蒙灰问题
来源:互联网 发布:c语言手册 chm 编辑:程序博客网 时间:2024/04/28 01:25
DecorView是Window的顶层view, 也就是说我们所有的控件都是包含在这个view中的. android7.0之前这个类是PhoneWindow的一个内部类, 7.0之后是一个独立的类, 同时也增加了一些新的属性和方法.
先看2张图片:
我们想要实现第2张图的效果, 应当在style中添加属性 <item name="android:windowTranslucentStatus">true</item> 发现出来的效果是第一种, 上面竟然蒙了一层半透明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这个属性, 然后实现全透明效果, 代码如下:
try {
DecorView decordView = (DecorView) getWindow().getDecorView(); //获取DecorView实例
Field field = DecorView.class.getDeclaredField("mSemiTransparentStatusBarColor"); //获取特定的成员变量
field.setAccessible(true); //设置对此属性的可访问性
field.setInt(decordView, Color.TRANSPARENT); //修改属性值
} catch (Exception e) {
e.printStackTrace();
}
- android7.0沉浸式状态栏蒙灰问题
- 解决Android7.0下沉浸式状态栏变灰问题
- Fragment沉浸式状态栏问题
- 状态栏、沉浸式状态栏
- Android5.0以上沉浸式状态栏的问题
- 安卓状态栏问题详解大全(沉浸式状态栏)
- android虚拟按键和状态栏的问题 沉浸式状态栏
- 沉浸式状态栏/透明状态栏
- 透明状态栏(沉浸式状态栏)
- Android沉浸式状态栏与EditText问题【沉浸式状态栏实现及遇到的坑】
- Android 沉浸式状态栏
- 沉浸式状态栏
- android 沉浸式 状态栏
- android 沉浸式状态栏
- android沉浸式状态栏
- 沉浸式状态栏
- Android沉浸式状态栏
- Android 沉浸式状态栏
- HTML——表格、表单
- UVa 202 (分数最小循环节)
- poj1328Radar Installation (贪心)
- Java学习笔记(二)—— 反射
- POJ3662
- android7.0沉浸式状态栏蒙灰问题
- CSRF攻击与防御(写得非常好)
- 一个简单的数字幸运抽奖小程序
- HDU 1058打表、控制输出
- HDU1659 Spreadsheet【拓扑排序】
- html基础
- Certificates does not conform to algorithm constraints
- 1097. Deduplication on a Linked List (25)
- 市民卡管理办法