Android設置沉浸式狀態欄時改變狀態欄的顏色(隻對MIUI V6可用)

Android支持在API 19及以上使用沉浸式狀態,但在MIUI V6下如果擴展的顏色比較淺,會導致狀態欄的文字無法看清。

在Android4.4設備上支持沉浸式狀態欄,隻需要添加values-v19/styles.xml 下添加

false
true

然後在可以擴展的控件添加屬性android:fitsSystemWindows="true"
就闊以瞭。
但在MIUI V6下如果擴展的顏色比較淺,會導致狀態欄的文字無法看清。在其他ROM上會有漸變的灰色區域。

MIUI提供瞭新的解決方案,在MIUI V6上狀態欄支持灰黑色和白色兩種字體顏色,開發者可以直接設置當前界面狀態欄的文字顏色。

具體代碼:

/**
     * 隻支持MIUI V6
     * @param context
     * @param type 0--隻需要狀態欄透明 1-狀態欄透明且黑色字體 2-清除黑色字體
     */
    public static void setStatusBarTextColor(Activity context,int type){
        if (!isMiUIV6()){
            DebugLog.d("isMiUIV6:"+false);
            return;
        }
        DebugLog.d("isMiUIV6:"+true);
        Window window = context.getWindow();
        Class clazz = window.getClass();
        try {
            int tranceFlag = 0;
            int darkModeFlag = 0;
            Class layoutParams = Class.forName("android.view.MiuiWindowManager$LayoutParams");
            Field field = layoutParams.getField("EXTRA_FLAG_STATUS_BAR_TRANSPARENT");
            tranceFlag = field.getInt(layoutParams);
            field = layoutParams.getField("EXTRA_FLAG_STATUS_BAR_DARK_MODE");
            darkModeFlag = field.getInt(layoutParams);
            Method extraFlagField = clazz.getMethod("setExtraFlags", int.class, int.class);
            if (type == 0){
                extraFlagField.invoke(window, tranceFlag, tranceFlag);//隻需要狀態欄透明
            }else if(type == 1){
                extraFlagField.invoke(window, tranceFlag | darkModeFlag, tranceFlag | darkModeFlag);//狀態欄透明且黑色字體
            }else {
                extraFlagField.invoke(window, 0, darkModeFlag);//清除黑色字體
            }
        }catch (Exception e){

        }
    }

    private static final String KEY_MIUI_VERSION_NAME = "ro.miui.ui.version.name";
    private static boolean isMiUIV6() {
        try {
            final BuildProperties prop = BuildProperties.newInstance();
            String name = prop.getProperty(KEY_MIUI_VERSION_NAME, "");
            if ("V6".equals(name)){
                return  true;
            }else {
                return false;
            }
//            return prop.getProperty(KEY_MIUI_VERSION_CODE, null) != null
//                    || prop.getProperty(KEY_MIUI_VERSION_NAME, null) != null
//                    || prop.getProperty(KEY_MIUI_INTERNAL_STORAGE, null) != null;
        } catch (final IOException e) {
            return false;
        }
    }

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *