You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android 13中设置状态栏与导航栏样式时状态栏文字颜色异常问题

解决Android 13中状态栏/导航栏白背景黑文字的配置冲突问题

问题根源

Android 13(API 33)开始,setSystemUiVisibility方法已被废弃,使用旧API设置SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR时,会覆盖XML中配置的windowLightStatusBar属性,导致状态栏文字变回白色。

方案1:使用WindowInsetsController API(推荐)

这是Android 11+官方推荐的新方式,能独立控制状态栏和导航栏的文字/图标颜色,避免配置冲突:

1. 调整XML配置

确保状态栏和导航栏背景为白色:

<item name="android:navigationBarColor">@color/white</item>
<item name="android:statusBarColor">@color/white</item>
<!-- 可选:保留此配置,代码会覆盖,也可直接移除 -->
<item name="android:windowLightStatusBar" tools:targetApi="m">true</item>

2. 替换Java代码

在Activity的onCreate方法中替换原有代码:

WindowInsetsController insetsController = getWindow().getDecorView().getWindowInsetsController();
if (insetsController != null) {
    // 设置状态栏文字/图标为深色
    insetsController.setSystemBarsAppearance(
        WindowInsetsController.APPEARANCE_LIGHT_STATUS_BARS,
        WindowInsetsController.APPEARANCE_LIGHT_STATUS_BARS
    );
    // 设置导航栏图标为深色(Android O及以上版本支持)
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
        insetsController.setSystemBarsAppearance(
            WindowInsetsController.APPEARANCE_LIGHT_NAVIGATION_BARS,
            WindowInsetsController.APPEARANCE_LIGHT_NAVIGATION_BARS
        );
    }
}

方案2:修复旧API的使用逻辑

若需兼容低版本,需同时设置状态栏和导航栏的浅色标志,防止配置被覆盖:

int uiFlags = 0;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
    uiFlags = View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR | View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR;
} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
    uiFlags = View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR;
}
getWindow().getDecorView().setSystemUiVisibility(uiFlags);

注意事项

  • 确认@color/white为纯白色,保证文字与背景的对比度符合系统规范。
  • Android 13及以上版本优先使用WindowInsetsController,旧API后续版本可能会被彻底移除。

内容的提问来源于stack exchange,提问作者rahim

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 07:53:09