棉花糖windowLightStatusBar = true在MI手机中不起作用

问题描述 投票:5回答:2

我想要白色状态栏,并且还希望状态栏图标具有深色默认颜色。但是现在状态栏颜色为白色,但状态栏图标颜色未更改为深色默认颜色。我的主题代码

值-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
2个回答
12
投票
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);

它就像一个魅力。


0
投票

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

要使此操作生效,窗口必须使用windowDrawsSystemBarBackgrounds绘制系统栏背景,并且状态栏不能被要求为半透明windowTranslucentStatus

© www.soinside.com 2019 - 2024. All rights reserved.