因为各种原因需要使用状态栏,调整状态栏背景颜色、文字颜色时,获取到一个工具类
public class StatusBarUtil {
/**设置状态栏透明与字体颜色
*/
public static void setStatusBarTranslucent(Activity acitivty, boolean isLightStatusBar) {
Window window = acitivty.getWindow();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT && Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
//设置文字、图片颜色为原来的颜色 如果添加 View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR 则显示为深色的文字图片
window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
| View.SYSTEM_UI_FLAG_LAYOUT_STABLE);
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
//设置状态栏背景透明
window.setStatusBarColor(Color.TRANSPARENT);
}
if (isXiaomi()) {
setXiaomiStatusBar(window, isLightStatusBar);
} else if (isMeizu()) {
setMeizuStatusBar(window, isLightStatusBar);
}
}
/**是否是小米手机*/
public static boolean isXiaomi() {
return "Xiaomi".equals(Build.MANUFACTURER);
}
/**设置小米状态栏*/
public static void setXiaomiStatusBar(Window window, boolean isLightStatusBar) {
Class<? extends Window> clazz = window.getClass();
try {
Class<?> layoutParams = Class.forName("android.view.MiuiWindowManager$LayoutParams");
Field field = layoutParams.getField("EXTRA_FLAG_STATUS_BAR_DARK_MODE");
int darkModeFlag = field.getInt(layoutParams);
Method extraFlagField = clazz.getMethod("setExtraFlags", int.class, int.class);
extraFlagField.invoke(window, isLightStatusBar ? darkModeFlag : 0, darkModeFlag);
} catch (Exception e) {
e.printStackTrace();
}
}
/**是否是魅族手机*/
public static boolean isMeizu() {
try {
Method method = Build.class.getMethod("hasSmartBar");
return method != null;
} catch (NoSuchMethodException e) {
}
return false;
}
/**设置魅族状态栏*/
public static void setMeizuStatusBar(Window window, boolean isLightStatusBar) {
WindowManager.LayoutParams params = window.getAttributes();
try {
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(params);
if (isLightStatusBar) {
value |= bit;
} else {
value &= ~bit;
}
meizuFlags.setInt(params, value);
window.setAttributes(params);
darkFlag.setAccessible(false);
meizuFlags.setAccessible(false);
} catch (Exception e) {
e.printStackTrace();
}
}
}
参考文章
http://blog.youkuaiyun.com/smileiam/article/details/73603840
上面的方法是源自某兄弟的blog修改而来,但找不到文章来源了T-T