Android系统状态栏和导航栏颜色修改

/**
 * 系统状态栏和导航栏工具类
 */
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以上版本,对低版本尽可能兼用。