/**
* 系统状态栏和导航栏工具类
*/
public class SystemBarUtils {
public static void setSystemBarStyle(@NonNull Activity activity, SystemChromeStyle systemChromeStyle) {
Window window = activity.getWindow();
View view = window.getDecorView();
WindowInsetsControllerCompat windowInsetsControllerCompat = new WindowInsetsControllerCompat(window, view);
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.R) {
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
// window.clearFlags(201326592);
window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
}
if (Build.VERSION.SDK_INT >= 23) {
if (systemChromeStyle.statusBarIconBrightness != null) {
switch (systemChromeStyle.statusBarIconBrightness) {
case DARK:
windowInsetsControllerCompat.setAppearanceLightStatusBars(true);
break;
case LIGHT:
windowInsetsControllerCompat.setAppearanceLightStatusBars(false);
}
}
if (systemChromeStyle.statusBarColor != null) {
window.setStatusBarColor(systemChromeStyle.statusBarColor);
}
}
if (systemChromeStyle.systemStatusBarContrastEnforced != null && Build.VERSION.SDK_INT >= 29) {
window.setStatusBarContrastEnforced(systemChromeStyle.systemStatusBarContrastEnforced);
}
if (Build.VERSION.SDK_INT >= 26) {
if (systemChromeStyle.systemNavigationBarIconBrightness != null) {
switch (systemChromeStyle.systemNavigationBarIconBrightness) {
case DARK:
windowInsetsControllerCompat.setAppearanceLightNavigationBars(true);
break;
case LIGHT:
windowInsetsControllerCompat.setAppearanceLightNavigationBars(false);
}
}
if (systemChromeStyle.systemNavigationBarColor != null) {
window.setNavigationBarColor(systemChromeStyle.systemNavigationBarColor);
}
}
if (systemChromeStyle.systemNavigationBarDividerColor != null && Build.VERSION.SDK_INT >= 28) {
window.setNavigationBarDividerColor(systemChromeStyle.systemNavigationBarDividerColor);
}
if (systemChromeStyle.systemNavigationBarContrastEnforced != null && Build.VERSION.SDK_INT >= 29) {
window.setNavigationBarContrastEnforced(systemChromeStyle.systemNavigationBarContrastEnforced);
}
}
public static class SystemChromeStyle {
@Nullable
public final Integer statusBarColor; //状态栏颜色
@Nullable public final Brightness statusBarIconBrightness; //状态栏图标颜色
@Nullable public final Boolean systemStatusBarContrastEnforced; //是否强制保证状态栏对比度
@Nullable public final Integer systemNavigationBarColor; //导航栏颜色
@Nullable public final Brightness systemNavigationBarIconBrightness;//导航栏图标颜色
@Nullable public final Integer systemNavigationBarDividerColor;//导航栏分隔线颜色
@Nullable public final Boolean systemNavigationBarContrastEnforced;//是否强制保证导航栏对比度
public SystemChromeStyle(
@Nullable Integer statusBarColor,
@Nullable Brightness statusBarIconBrightness,
@Nullable Boolean systemStatusBarContrastEnforced,
@Nullable Integer systemNavigationBarColor,
@Nullable Brightness systemNavigationBarIconBrightness,
@Nullable Integer systemNavigationBarDividerColor,
@Nullable Boolean systemNavigationBarContrastEnforced) {
this.statusBarColor = statusBarColor;
this.statusBarIconBrightness = statusBarIconBrightness;
this.systemStatusBarContrastEnforced = systemStatusBarContrastEnforced;
this.systemNavigationBarColor = systemNavigationBarColor;
this.systemNavigationBarIconBrightness = systemNavigationBarIconBrightness;
this.systemNavigationBarDividerColor = systemNavigationBarDividerColor;
this.systemNavigationBarContrastEnforced = systemNavigationBarContrastEnforced;
}
}
public enum Brightness {
LIGHT("Brightness.light"),
DARK("Brightness.dark");
@NonNull
static Brightness fromValue(@NonNull String encodedName) throws NoSuchFieldException {
for (Brightness brightness : Brightness.values()) {
if (brightness.encodedName.equals(encodedName)) {
return brightness;
}
}
throw new NoSuchFieldException("No such Brightness: " + encodedName);
}
@NonNull private String encodedName;
Brightness(@NonNull String encodedName) {
this.encodedName = encodedName;
}
}
}
以上代码来自FlutterBoostUtils,调用的WindowInsetsControllerCompat类方法,此类是WindowInsetsController的包装类,适配sdk 30以上版本,对低版本尽可能兼用。