时间:2021-05-19
问题:
最近更新了最新的MIUI 9 系统,安装上公司的应用之后,发现之前适配过的沉浸式状态栏忽然没有效果了,感觉很郁闷的我于是去网上搜了一下关于小米手机状态栏适配方面的文章,发现大部分文章都还是之前的适配方案:
public void setStatusBarDarkMode(boolean darkmode, Activity activity) { Class<? extends Window> clazz = activity.getWindow().getClass(); try { int darkModeFlag = 0; Class<?> layoutParams = Class.forName("android.view.MiuiWindowManager$LayoutParams"); Field field = layoutParams.getField("EXTRA_FLAG_STATUS_BAR_DARK_MODE"); darkModeFlag = field.getInt(layoutParams); Method extraFlagField = clazz.getMethod("setExtraFlags", int.class, int.class); extraFlagField.invoke(activity.getWindow(), darkmode ? darkModeFlag : 0, darkModeFlag); } catch (Exception e) { e.printStackTrace(); }}于是乎就自己去小米的开放平台逛了逛,然后就找到了问题所在:
1、在 Android 6.0 以前,Android 没有方法可以实现「状态栏黑色字符」效果,因此 MIUI 自己做了一个接口。
2、在 Android 6.0 及以上版本,Android 提供了标准的方法实现「状态栏黑色字符」效果,但这个方法和 MIUI 的方法产生了冲突,以致于当开发者使用 Android 标准方法时,没有出现预期的效果,这给很多开发者都造成了困扰,尤其是海外开发者。
为了解决这个问题,小米觉决定在MIUI 9之后兼容Android 官方的标准方案,舍弃了自己的方案,所以说,对于MIUI9 以上版本的用户,对于手机状态栏深色字体的实现需要重新适配,小米官方也给出了最新的适配方案。
在新的 MIUI 版本(即基于 Android 6.0 ,开发版 7.7.13 及以后版本):
状态栏深色字体:
Window window = getWindow();window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);状态栏白色字体:
int flag = window.getDecorView().getSystemUiVisibility() & ~View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR;window.getDecorView().setSystemUiVisibility(flag);但是为了继续适配之前的MIUI系统 需要在使用的时候同时写上以上两种方案
最后实现代码如下:
public void setStatusBarDarkMode(boolean darkmode, Activity activity) { Class<? extends Window> clazz = activity.getWindow().getClass(); try { int darkModeFlag = 0; Class<?> layoutParams = Class.forName("android.view.MiuiWindowManager$LayoutParams"); Field field = layoutParams.getField("EXTRA_FLAG_STATUS_BAR_DARK_MODE"); darkModeFlag = field.getInt(layoutParams); Method extraFlagField = clazz.getMethod("setExtraFlags", int.class, int.class); extraFlagField.invoke(activity.getWindow(), darkmode ? darkModeFlag : 0, darkModeFlag); if(darkmode){ Window window = getWindow(); window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR); }else{ int flag = activity.getWindow().getDecorView().getSystemUiVisibility() & ~View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR; window.getDecorView().setSystemUiVisibility(flag); } } catch (Exception e) { e.printStackTrace(); }}修改为以上代码之后,终于又看到了熟悉的沉浸式效果!
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
上周,9月13日,小米就曾发布微博预告了小米平板将可刷MIUI6。据MIUI官方论坛用户表示,小米平板的MIUI6采用了新的锁屏界面和系统级的沉浸式状态栏,部分
小米miuiv6发布后,似乎总喜欢推出一些设计的专业名词,奥氏体304不锈钢,沉浸式状态栏等,这些都是看起来好像很高大上的词语。小编为你介绍,什么是沉浸式状态栏
应用市场上App越来越多的出现沉浸式状态栏的设计(如下图所示)状态栏和导航栏具有相同的颜色。Android在4.4开始对于该种效果的支持,而在4.4之下,状态栏
透明状态栏(StatusBar)的全适配状态栏指定android手机上顶部显示手机状态信息的位置。透明状态栏是android自4.4开始新加入的功能,他可以是状
IOS点击按钮隐藏状态栏详解前言:最近学习IOS的基础知识,实现隐藏状态栏的功能,这里就记录下来,希望对大家有所帮助实例代码:@interfaceSecondV