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

如何在Android API 29及以上版本修改状态栏文字颜色

Android API 29 状态栏文字与图标改为黑色实现方案

实现方法

1. 代码动态设置(支持单页面按需切换)

适用场景:仅部分页面需要深色状态栏前景,或需要随页面状态动态切换样式

  • Kotlin 实现代码:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
    // 先设置状态栏为浅色背景,必须满足背景亮度要求才能生效深色前景
    window.statusBarColor = Color.WHITE
    window.insetsController?.apply {
        setSystemBarsAppearance(
            WindowInsetsController.APPEARANCE_LIGHT_STATUS_BARS,
            WindowInsetsController.APPEARANCE_LIGHT_STATUS_BARS
        )
    }
}
  • Java 实现代码:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
    getWindow().setStatusBarColor(Color.WHITE);
    WindowInsetsController insetsController = getWindow().getInsetsController();
    if (insetsController != null) {
        insetsController.setSystemBarsAppearance(
            WindowInsetsController.APPEARANCE_LIGHT_STATUS_BARS,
            WindowInsetsController.APPEARANCE_LIGHT_STATUS_BARS
        );
    }
}

2. 主题静态配置(全局/固定页面生效)

适用场景:所有页面都统一使用深色状态栏前景
在res/values-v29/themes.xml中,给对应页面的主题添加如下配置:

<style name="AppTheme.StatusBar.Light" parent="你原有主题的父类">
    <item name="android:statusBarColor">@color/white</item>
    <item name="android:windowLightStatusBar">true</item>
</style>

之后在AndroidManifest.xml中给对应Activity绑定该主题即可。

运行报错常见排查方案

  • 不要使用已废弃的setSystemUiVisibility()方法:API 29 开始该方法被官方废弃,部分ROM调用会直接抛出异常,统一替换为上述WindowInsetsController相关API
  • 状态栏背景必须为浅色:部分厂商ROM强制要求状态栏背景亮度达到阈值才允许设置深色前景,否则会触发配置失败报错
  • 避免暗色主题覆盖配置:如果你的应用适配了深色模式,且当前系统处于暗色模式,系统会强制覆盖windowLightStatusBar配置,需要单独对暗色模式下的状态栏样式做特殊处理

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 15:54:05