更改小米,魅族手机状态栏字体颜色

以前在githup找了一个工具类,状态栏字体颜色是白色的时候没有什么问题,

但是改为深颜色后,发现小米5手机是没有生效的,后面在小米开发文档看了一下,发现

6.0以后不用为小米的状态栏字体做处理了,下面是工具类,标红的地方是处理小米5以上的

状态栏字体颜色

手机类型

private static final String KEY_MIUI_VERSION_CODE = "ro.miui.ui.version.code";
private static final String KEY_MIUI_VERSION_NAME = "ro.miui.ui.version.name";
private static final String KEY_MIUI_INTERNAL_STORAGE = "ro.miui.internal.storage";


/**
 * 判断手机是否是小米
 *
 * @return
 */
public static boolean isMIUI() {
    try {
        final BuildProperties prop = BuildProperties.newInstance();
        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;
    }
}

/**
 * 判断手机是否是魅族
 *
 * @return
 */
public static boolean isFlyme() {
    try {
        // Invoke Build.hasSmartBar()
        final Method method = Build.class.getMethod("hasSmartBar");
        return method != null;
    } catch (final Exception e) {
        return false;
    }
}




/**
 * @param activity
 * @param useThemestatusBarColor   是否要状态栏的颜色,不设置则为透明色
 * @param withoutUseStatusBarColor 是否不需要使用状态栏为暗色调
 */
public static void setStatusBar(Activity activity, boolean useThemestatusBarColor, boolean withoutUseStatusBarColor) {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {//5.0及以上
        View decorView = activity.getWindow().getDecorView();
        int option = View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
                | View.SYSTEM_UI_FLAG_LAYOUT_STABLE;
        decorView.setSystemUiVisibility(option);
        if (useThemestatusBarColor) {
            activity.getWindow().setStatusBarColor
(activity.getResources().getColor(R.color.white));
        } else {
            activity.getWindow().setStatusBarColor
(Color.TRANSPARENT);
        }
    } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {//4.4到5.0
        WindowManager.LayoutParams localLayoutParams = 
activity.getWindow().getAttributes();
        localLayoutParams.flags = (WindowManager.
LayoutParams.FLAG_TRANSLUCENT_STATUS 
| localLayoutParams.flags);
    }
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M 
&& !withoutUseStatusBarColor) {
        activity.getWindow().getDecorView().
setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN 
| View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
    }
}


/**
 * 改变魅族的状态栏字体为黑色,要求FlyMe4以上
 */
private static void processFlyMe(boolean isLightStatusBar, Activity activity) {
    WindowManager.LayoutParams lp = activity.getWindow().getAttributes();
    try {
        Class<?> instance = Class.forName
("android.view.WindowManager$LayoutParams");
        int value = instance.getDeclaredField
("MEIZU_FLAG_DARK_STATUS_BAR_ICON").getInt(lp);
        Field field = instance.getDeclaredField("meizuFlags");
        field.setAccessible(true);
        int origin = field.getInt(lp);
        if (isLightStatusBar) {
            field.set(lp, origin | value);
        } else {
            field.set(lp, (~value) & origin);
        }
    } catch (Exception ignored) {
        ignored.printStackTrace();
    }
}



/**
 * 改变小米的状态栏字体颜色为黑色, 要求MIUI6以上  lightStatusBar为真时表示黑色字体
 */
private static void processMIUI(boolean lightStatusBar, Activity activity) {
    Class<? extends Window> clazz = activity.getWindow().getClass();
    try {
        int darkModeFlag;
        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(), 
lightStatusBar ? darkModeFlag : 0, darkModeFlag);
    } catch (Exception ignored) {
        ignored.printStackTrace();
    }
}



/**
 * 需要MIUIV6以上
 *
 * @param activity
 * @param dark     是否把状态栏文字及图标颜色设置为深色
 * @return boolean 成功执行返回true
 */
public static boolean MIUISetStatusBarLightMode(Activity activity, boolean dark) {
    boolean result = false;
    Window window = activity.getWindow();
    if (window != null) {
        Class clazz = window.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);
            if (dark) {
                //状态栏透明且黑色字体
                extraFlagField.invoke(window, darkModeFlag, darkModeFlag);
            } else {
                //清除黑色字体
                extraFlagField.invoke(window, 0, darkModeFlag);
            }
            result = true;

            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                //开发版 7.7.13 及以后版本采用了系统API,旧方法无效但不会报错,所以两个方式都要加上
                if (dark) {
                    activity.getWindow().getDecorView()
.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN 
| View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
                } else {
                    activity.getWindow().getDecorView()
.setSystemUiVisibility(View.SYSTEM_UI_FLAG_VISIBLE);
                }
            }
        } catch (Exception e) {

        }
    }
    return result;
}

/**
 * 设置状态栏图标为深色和魅族特定的文字风格
 * 可以用来判断是否为Flyme用户
 *
 * @param window 需要设置的窗口
 * @param dark   是否把状态栏文字及图标颜色设置为深色
 * @return boolean 成功执行返回true
 */
public static boolean FlymeSetStatusBarLightMode
(Window window, boolean dark) {
    boolean result = false;
    if (window != null) {
        try {
            WindowManager.LayoutParams lp = window.getAttributes();
            Field darkFlag = WindowManager.LayoutParams.class
                    .getDeclaredField("MEIZU_FLAG_DARK_STATUS_BAR_ICON");
            Field meizuFlags = WindowManager.LayoutParams.class
                    .getDeclaredField("meizuFlags");
            darkFlag.setAccessible(true);
            meizuFlags.setAccessible(true);
            int bit = darkFlag.getInt(null);
            int value = meizuFlags.getInt(lp);
            if (dark) {
                value |= bit;
            } else {
                value &= ~bit;
            }
            meizuFlags.setInt(lp, value);
            window.setAttributes(lp);
            result = true;
        } catch (Exception e) {

        }
    }
    return result;
}





/**
 * 设置状态栏文字色值为深色调
 *
 * @param useDart  是否使用深色调
 * @param activity
 */
@RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN)
public static void setStatusTextColor(boolean useDart, Activity activity) {
    if (isFlyme()) {
        processFlyMe(useDart, activity);
    } else if (isMIUI()) {
        //6.0后小米状态栏用的原生的
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            if (useDart) {
                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                    activity.getWindow().getDecorView()
.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN 
| View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
                }
            } else {
                activity.getWindow().getDecorView().setSystemUiVisibility(
                        View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN 
| View.SYSTEM_UI_FLAG_LAYOUT_STABLE);
            }
            activity.getWindow().getDecorView().findViewById(android.R.id.content)
.setPadding(0, 0, 0, navigationHeight);
        } else {
            processMIUI(useDart, activity);
        }
    } else {
        if (useDart) {
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                activity.getWindow().getDecorView().setSystemUiVisibility
(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN 
| View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
            }
        } else {
            activity.getWindow().getDecorView().setSystemUiVisibility(
                    View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
 | View.SYSTEM_UI_FLAG_LAYOUT_STABLE);
        }
        activity.getWindow().getDecorView().findViewById(android.R.id.content)
.setPadding(0, 0, 0, navigationHeight);
    }
}

/**
 * 设置状态栏文字色值为深色调
 *
 * @param useDart  是否使用深色调
 * @param activity
 */
public static void setStatusTextColorNew(boolean useDart, Activity activity) {
    if (isFlyme()) {
        FlymeSetStatusBarLightMode(activity.getWindow(), useDart);
        //processFlyMe(useDart, activity);
    } else if (isMIUI()) {
        MIUISetStatusBarLightMode(activity, useDart);
    } else {
        if (useDart) {
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                activity.getWindow().getDecorView().setSystemUiVisibility
(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN 
| View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
            }
        } else {
            activity.getWindow().getDecorView().setSystemUiVisibility(
                    View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN 
| View.SYSTEM_UI_FLAG_LAYOUT_STABLE);
        }
        activity.getWindow().getDecorView()
.findViewById(android.R.id.content).setPadding(0, 0, 0, navigationHeight);
    }
}




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值