**
在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和魅族,后续还可以增加其他品牌