详解关于MIUI 9沉浸式状态栏的最新适配
问题:
最近更新了最新的MIUI9系统,安装上公司的应用之后,发现之前适配过的沉浸式状态栏忽然没有效果了,感觉很郁闷的我于是去网上搜了一下关于小米手机状态栏适配方面的文章,发现大部分文章都还是之前的适配方案:
publicvoidsetStatusBarDarkMode(booleandarkmode,Activityactivity){ Classclazz=activity.getWindow().getClass(); try{ intdarkModeFlag=0; Class>layoutParams=Class.forName("android.view.MiuiWindowManager$LayoutParams"); Fieldfield=layoutParams.getField("EXTRA_FLAG_STATUS_BAR_DARK_MODE"); darkModeFlag=field.getInt(layoutParams); MethodextraFlagField=clazz.getMethod("setExtraFlags",int.class,int.class); extraFlagField.invoke(activity.getWindow(),darkmode?darkModeFlag:0,darkModeFlag); }catch(Exceptione){ e.printStackTrace(); } }
于是乎就自己去小米的开放平台逛了逛,然后就找到了问题所在:
1、在Android6.0以前,Android没有方法可以实现「状态栏黑色字符」效果,因此MIUI自己做了一个接口。
2、在Android6.0及以上版本,Android提供了标准的方法实现「状态栏黑色字符」效果,但这个方法和MIUI的方法产生了冲突,以致于当开发者使用Android标准方法时,没有出现预期的效果,这给很多开发者都造成了困扰,尤其是海外开发者。
为了解决这个问题,小米觉决定在MIUI9之后兼容Android官方的标准方案,舍弃了自己的方案,所以说,对于MIUI9以上版本的用户,对于手机状态栏深色字体的实现需要重新适配,小米官方也给出了最新的适配方案。
在新的MIUI版本(即基于Android6.0,开发版7.7.13及以后版本):
状态栏深色字体:
Windowwindow=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);
状态栏白色字体:
intflag=window.getDecorView().getSystemUiVisibility()&~View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR; window.getDecorView().setSystemUiVisibility(flag);
但是为了继续适配之前的MIUI系统需要在使用的时候同时写上以上两种方案
最后实现代码如下:
publicvoidsetStatusBarDarkMode(booleandarkmode,Activityactivity){ Classclazz=activity.getWindow().getClass(); try{ intdarkModeFlag=0; Class>layoutParams=Class.forName("android.view.MiuiWindowManager$LayoutParams"); Fieldfield=layoutParams.getField("EXTRA_FLAG_STATUS_BAR_DARK_MODE"); darkModeFlag=field.getInt(layoutParams); MethodextraFlagField=clazz.getMethod("setExtraFlags",int.class,int.class); extraFlagField.invoke(activity.getWindow(),darkmode?darkModeFlag:0,darkModeFlag); if(darkmode){ Windowwindow=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{ intflag=activity.getWindow().getDecorView().getSystemUiVisibility() &~View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR; window.getDecorView().setSystemUiVisibility(flag); } }catch(Exceptione){ e.printStackTrace(); } }
修改为以上代码之后,终于又看到了熟悉的沉浸式效果!
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。