详解关于MIUI 9沉浸式状态栏的最新适配

 更新时间:2018年05月17日 09:00:07   作者:loading  
由于各系统版本的限制,沉浸式状态栏对系统有要求,本篇文章主要介绍了详解关于MIUI 9沉浸式状态栏的最新适配,非常具有实用价值,需要的朋友可以参考下

问题:

最近更新了最新的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();
  }
}

修改为以上代码之后,终于又看到了熟悉的沉浸式效果!

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • Android 编程下字库的使用及注意事项

    Android 编程下字库的使用及注意事项

    在安卓操作系统下对于 TextView 字体的支持非常有限,默认情况下TextView的typeface属性支持三种字体;接下来本文将会介绍Android 编程下字库的使用及注意事项,感兴趣的朋友可以了解下,希望对你有所帮助
    2013-01-01
  • Android ViewPager相册横向移动的实现方法

    Android ViewPager相册横向移动的实现方法

    本篇文章小编为大家介绍,Android ViewPager相册横向移动的实现方法。需要的朋友参考下
    2013-04-04
  • android长截屏原理及实现代码

    android长截屏原理及实现代码

    本篇文章主要介绍了android长截屏原理及实现代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-08-08
  • Android编程实现3D旋转效果实例

    Android编程实现3D旋转效果实例

    这篇文章主要介绍了Android编程实现3D旋转效果的方法,基于Android的Camera类实现坐标变换达到图片3D旋转效果,需要的朋友可以参考下
    2016-01-01
  • Android获取验证码倒计时显示效果

    Android获取验证码倒计时显示效果

    这篇文章主要为大家详细介绍了Android获取验证码显示的两种简单实现,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-10-10
  • Android之日期及时间选择对话框用法实例分析

    Android之日期及时间选择对话框用法实例分析

    这篇文章主要介绍了Android之日期及时间选择对话框用法,以实例形式较为详细的分析了Android创建日期及时间选择对话框的实现技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-09-09
  • Android 处理空列表的方法(必看篇)

    Android 处理空列表的方法(必看篇)

    下面小编就为大家带来一篇Android 处理空列表的方法(必看篇)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-04-04
  • Android 安全加密:消息摘要Message Digest详解

    Android 安全加密:消息摘要Message Digest详解

    本文主要介绍Android安全加密消息摘要Message Digest,这里整理了详细的资料,并说明如何使用Message Digest 和使用注意事项,有需要的小伙伴可以参考下
    2016-09-09
  • Android应用中使用ViewPager实现类似QQ的界面切换效果

    Android应用中使用ViewPager实现类似QQ的界面切换效果

    这篇文章主要介绍了Android应用中使用ViewPager实现类似QQ的界面切换效果的示例,文中的例子重写了PagerAdapter,并且讲解了如何解决Android下ViewPager和PagerAdapter中调用notifyDataSetChanged失效的问题,需要的朋友可以参考下
    2016-03-03
  • Android中用MediaRecorder进行录影的实例代码

    Android中用MediaRecorder进行录影的实例代码

    这篇文章主要介绍了Android中用MediaRecorder进行录影的实例代码,有需要的朋友可以参考一下
    2014-01-01

最新评论