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

Android如何设置状态栏为白色且图标为黑色(setSystemUiVisibility已废弃)

Android 状态栏适配方案(minSdk21,targetSdk31)

你之前的代码判断条件>=21存在合理性问题:SYSTEM_UI_FLAG_LIGHT_STATUS_BAR属性仅在API23(Android 6.0)及以上版本生效,API21~22版本原生不支持状态栏图标变为深色,设为白色状态栏会导致白色图标看不清。

代码实现方案(Java)

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
    // 统一设置状态栏底色为白色
    getWindow().setStatusBarColor(Color.WHITE);
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
        // API30及以上使用官方推荐的WindowInsetsController替代废弃方法
        WindowInsetsController insetsController = getWindow().getInsetsController();
        if (insetsController != null) {
            insetsController.setSystemBarsAppearance(
                WindowInsetsController.APPEARANCE_LIGHT_STATUS_BARS,
                WindowInsetsController.APPEARANCE_LIGHT_STATUS_BARS
            );
        }
    } else {
        // API23~29版本原有方法仍可正常使用,官方未做移除处理
        getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
    }
}

低版本兼容说明

API21~22版本没有原生支持的深色状态栏图标方案,建议做差异化处理:

  • 方案一:低版本下状态栏改为浅灰色,保证白色图标可见
  • 方案二:仅在API23及以上版本使用白色状态栏

主题实现方案(无需写代码)

在对应版本的style文件中配置Activity主题即可:

  1. res/values-v21/styles.xml(适配5.0~5.1)
<item name="android:statusBarColor">#e0e0e0</item>
  1. res/values-v23/styles.xml(适配6.0及以上)
<item name="android:statusBarColor">@android:color/white</item>
<item name="android:windowLightStatusBar">true</item>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 22:24:04