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
相关产品推荐
相关产品推荐

