【问题标题】:Marshmallow windowLightStatusBar = true not working in MI phoneMarshmallow windowLightStatusBar = true 不能在 MI 手机中工作
【发布时间】:2017-05-14 11:11:44
【问题描述】:

我想要白色的状态栏,也想要带有深色默认颜色的状态栏图标。但现在状态栏颜色为白色,但状态栏图标颜色未更改为深色默认颜色。我的主题代码

value-v23/styles.xml

<style name="AppTheme.NoActionBar">

        <item name="windowActionBar">false</item>
        <item name="windowNoTitle">true</item>
        <item name="android:windowLightStatusBar">true</item>
        <item name="android:windowTranslucentStatus">true</item>
        <item name="android:windowDrawsSystemBarBackgrounds">true</item>
        <item name="android:statusBarColor">@android:color/white</item>
    </style>

我将 windowLightStatusBar 设置为 true,它可以在所有设备中工作,但不能在 MI 手机中工作。

<item name="android:windowLightStatusBar">true</item>

我附上了 MI 设备和 intex 设备的屏幕截图。在 MI 设备状态栏图标显示为白色,在 intex 设备中显示为深色默认颜色。

【问题讨论】:

    标签: android statusbar


    【解决方案1】:
    public static boolean setMiuiStatusBarDarkMode(Activity activity, boolean darkmode) {
        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);
            return true;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return false;
    }
    
    setMiuiStatusBarDarkMode(YourBaseActivity.this,true);
    

    它就像一个魅力。

    【讨论】:

    • 说真的,我想给这个答案更多的投票,:)
    • 如果他们在相同的OS版本但不同的MIUI版本中更改类名MiuiWindowManager怎么办?因此,如果发生这种情况,此代码将无法在具有不同类名(MiuiWindowManager)的 MIUI 中工作,对吧?
    【解决方案2】:

    来自文档https://developer.android.com/reference/android/R.attr#windowLightStatusBar

    要使其生效,窗口必须使用windowDrawsSystemBarBackgrounds 绘制系统栏背景,并且不得使用windowTranslucentStatus 请求状态栏为半透明

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-11-06
      • 1970-01-01
      • 2011-06-22
      • 1970-01-01
      • 2015-05-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多