详解关于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实现调用摄像头拍照与视频功能

    这篇文章主要为大家详细介绍了Android实现调用摄像头拍照与视频功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-04-04
  • Android自定义View多种效果解析

    Android自定义View多种效果解析

    这篇文章主要为大家详细介绍了Android自定义View多种效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-05-05
  • Kotlin启动协程的三种方式示例详解

    Kotlin启动协程的三种方式示例详解

    这篇文章主要为大家介绍了Kotlin启动协程的三种方式示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-12-12
  • 准确测量 Android 应用中 Activity 和 Fragment 的启动时间的详细过程

    准确测量 Android 应用中 Activity 和 Fragmen

    在 Android 应用开发中,了解每个 Activity 和 Fragment 的启动时间对于性能优化至关重要,本文将介绍几种方法来准确测量 Activity 和 Fragment 的启动时间,并提供实际操作步骤,以帮助提升应用的响应速度和用户体验,需要的朋友可以参考下
    2024-07-07
  • AndroidX下使用Activity和Fragment的变化详解

    AndroidX下使用Activity和Fragment的变化详解

    这篇文章主要介绍了AndroidX下使用Activity和Fragment的变化详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-04-04
  • android实现okHttp的get和post请求的简单封装与使用

    android实现okHttp的get和post请求的简单封装与使用

    这篇文章主要介绍了android实现okHttp的get和post请求的简单封装与使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-05-05
  • Android的Touch事件处理机制介绍

    Android的Touch事件处理机制介绍

    Android的Touch事件处理机制比较复杂,特别是在考虑了多点触摸以及事件拦截之后,有需求的朋友可以参考下
    2012-11-11
  • Android编程实现获取多媒体库视频、音频、图片的方法

    Android编程实现获取多媒体库视频、音频、图片的方法

    这篇文章主要介绍了Android编程实现获取多媒体库视频、音频、图片的方法,涉及Android针对多媒体视频、音频及相关专辑图片、缩略图等获取操作实现技巧,需要的朋友可以参考下
    2018-01-01
  • Android Shader应用开发之霓虹闪烁文字效果

    Android Shader应用开发之霓虹闪烁文字效果

    这篇文章主要为大家详细介绍了Android Shader应用开发之霓虹闪烁文字效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-07-07
  • Android选中突出背景效果的底部导航栏功能

    Android选中突出背景效果的底部导航栏功能

    这篇文章主要介绍了Android选中突出背景效果的底部导航栏功能,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-10-10

最新评论