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

Android 15下fitsSystemWindows=true时如何修改状态栏颜色?

Android 15 下 fitsSystemWindows=true 时修改状态栏颜色的解决方案

当启用enableEdgeToEdge()后,系统栏默认会变为透明状态,fitsSystemWindows=true会调整布局适配系统空间,但不会自动继承状态栏颜色配置,需要手动重新设置状态栏背景色和图标亮度,以下是几种可行方案:

方案一:通过WindowInsetsController动态设置

在Activity的onCreate或onResume方法中,直接操作WindowInsetsController修改状态栏:

Kotlin 代码示例

window.insetsController?.apply {
    // 设置状态栏背景色,替换为你的目标颜色资源
    window.statusBarColor = ContextCompat.getColor(this@YourActivity, R.color.custom_status_bar)
    // 根据状态栏颜色设置图标亮度:false为深色图标,true为浅色图标,保证文字可见
    isAppearanceLightStatusBars = false
}

Java 代码示例

WindowInsetsController controller = getWindow().getInsetsController();
if (controller != null) {
    // 设置状态栏背景色
    getWindow().setStatusBarColor(ContextCompat.getColor(this, R.color.custom_status_bar));
    // 调整图标亮度
    controller.setAppearanceLightStatusBars(false);
}

方案二:在主题中静态配置

在res/values/styles.xml(或针对Android 15的res/values-v35/styles.xml)中修改Activity主题:

<style name="AppTheme.Main" parent="Theme.Material3.DayNight.NoActionBar">
    <!-- 其他主题属性 -->
    <!-- 设置状态栏背景色 -->
    <item name="android:statusBarColor">@color/custom_status_bar</item>
    <!-- 设置状态栏图标/文字亮度:false为深色,true为浅色 -->
    <item name="android:windowLightStatusBar">false</item>
</style>

若使用Material3主题,也可使用不带android:前缀的statusBarColor属性,适配更低版本Android系统。

方案三:结合enableEdgeToEdge()调整

调用enableEdgeToEdge()后,立即覆盖状态栏透明设置:

enableEdgeToEdge()
// 设置状态栏颜色
window.statusBarColor = ContextCompat.getColor(this, R.color.custom_status_bar)
// 调整图标亮度
ViewCompat.getWindowInsetsController(window.decorView)?.isAppearanceLightStatusBars = false

注意事项

  • 确保状态栏颜色和图标亮度在日间/夜间模式下都有良好可读性,避免文字与背景色相近导致识别困难。
  • fitsSystemWindows=true的设置可保留,它仅负责布局适配,不会影响状态栏颜色修改。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 19:27:14