在Flutter中如何将状态栏图标颜色设置为白色
状态栏黑底白字设置失效解决方案
常见失效原因及修复方法
- 系统版本适配问题
Android 6.0(API 23)才首次开放了修改状态栏文字、图标颜色的API,低于该版本的系统默认状态栏文字只能为白色,无需额外配置也无法修改为深色,若你的应用兼容API 23以下版本,需要做版本分支判断。 - 代码配置错误
不要混淆状态栏字体模式控制flag,SYSTEM_UI_FLAG_LIGHT_STATUS_BAR是将字体图标改为深色(适配浅色状态栏背景),你需要设置黑底白字,需关闭该flag,正确动态配置代码如下:
Kotlin写法如下:if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { Window window = getWindow(); // 清除之前的字体模式flag window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_VISIBLE); // 设置状态栏背景为黑色 window.setStatusBarColor(Color.BLACK); }if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { window.apply { decorView.systemUiVisibility = View.SYSTEM_UI_FLAG_VISIBLE statusBarColor = Color.BLACK } } - 主题配置覆盖问题
检查你应用的主题配置,需要在res/values-v23/styles.xml中添加对应配置,避免主题设置覆盖了动态代码:<style name="AppTheme" parent="你当前继承的主题父类"> <item name="android:statusBarColor">@android:color/black</item> <!-- 设为false代表状态栏字体图标为浅色(白色) --> <item name="android:windowLightStatusBar">false</item> </style> - 布局属性配置错误
检查页面根布局是否设置了android:fitsSystemWindows="true",如果设置为false会导致页面内容顶入状态栏区域,遮挡你设置的状态栏背景色。 - 第三方库冲突
如果你使用了沉浸式状态栏、状态栏适配类的第三方库,需要检查库的配置是否主动修改了状态栏样式,需要在库的初始化配置中指定黑底白字的样式,避免库配置覆盖你的自定义设置。 - 国产定制系统适配
部分早期国产Android定制系统(MIUI、Flyme等)有独立的状态栏字体控制API,若上述原生配置不生效,可以添加对应系统的适配代码,以MIUI为例:
你需要黑底白字,调用该方法时第二个参数传public static void setMIUIStatusBarLightMode(Window window, boolean isLightMode) { if (window == null) return; Class<? extends Window> clazz = window.getClass(); try { int darkModeFlag; Class<?> layoutParams = Class.forName("android.view.MiuiWindowManager$LayoutParams"); Field field = layoutParams.getField("EXTRA_FLAG_STATUS_BAR_DARK_MODE"); darkModeFlag = field.getInt(layoutParams); Method extraFlagField = clazz.getMethod("setExtraFlags", int.class, int.class); extraFlagField.invoke(window, isLightMode ? darkModeFlag : 0, darkModeFlag); } catch (Exception e) { e.printStackTrace(); } }false即可。
附件截图
你提交的相关截图如下:

内容的提问来源于stack exchange,提问作者genos
相关产品推荐
相关产品推荐

