**
在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:// MIUIBrandCustomizationUtils.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);elseStatusBarCompat.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和魅族,后续还可以增加其他品牌