根据手机品牌设置状态栏

**

在BaseActivity调用这个方法

**

ChangeStatusBarCompat(false, 0);

实现如下

  protected void ChangeStatusBarCompat(boolean isDark, int bgColor) {
        if (Configure.barHeight > 0 && Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT /*&& Build.VERSION.SDK_INT <Build.VERSION_CODES.M*/) {
            //通过手机品牌判断显示的状态
            switch (getBrand()) {
                case 1:
            //  MIUI
                    BrandCustomizationUtils.setMIUIStatusBarColor(this, isDark);
                    StatusBarCompat.compat(this, ContextCompat.getColor(this, R.color.color_trans_white));
                    break;
                case 2:
            //魅族
                    BrandCustomizationUtils.setFlyMeStatusBarColor(this, isDark);
                    StatusBarCompat.compat(this, ContextCompat.getColor(this, R.color.color_trans_white));
                    break;
                default:
            //其他
                    if (bgColor != -1)
                        StatusBarCompat.compat(this, bgColor);
                    else
                        StatusBarCompat.compat(this, ContextCompat.getColor(this, R.color.color_trans_black));
                    break;
            }
        }
    }

**

获取手机品牌

**

 /**
     * API<4.4不用管沉浸式, 4.4~6.0
     * M>API>4.4 判断手机型品牌 可控则通过反射 来改变状态栏颜色,不可控则改变状态栏背景色
     * API>M
     */
    private int getBrand() {
        String MODEL = Build.MODEL;
        if (MODEL == null || MODEL.length() == 0)
            return 0;
        if (MODEL.toLowerCase().contains("mi")) {
            return 1;
        } else if (MODEL.toLowerCase().contains("meizu") || MODEL.toLowerCase().contains("mx")) {
            return 2;
        } else {
            return 0;
        }
    }

**

自定义品牌工具类

**

  public class BrandCustomizationUtils {
    /**
     * setDarkStatusBar on FlyMe
     * 设置状态栏字体为暗色 仅魅族有效
     * 黑底白字 -> 白底黑字
     */
    public static void setFlyMeStatusBarColor(Activity activity, boolean isDark) {
        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 (isDark) {
                field.set(lp, origin | value);
            } else {
                field.set(lp, (~value) & origin);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static void setMIUIStatusBarColor(Activity context, boolean isDark) {

        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 (isDark) {
                extraFlagField.invoke(window, tranceFlag | darkModeFlag, tranceFlag | darkModeFlag);
            } else {
                extraFlagField.invoke(window, 0, darkModeFlag);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

这个工具类中只有MIUI和魅族,后续还可以增加其他品牌

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值