Android 15 Edge-to-edge enforcement状态栏颜色异常问题咨询
Android 15(targetSDK 35)Edge-to-edge 适配问题解析
核心结论:这不是Bug,是Android 15的预期行为变更
当targetSDK升级到35(对应Android 15)时,系统强制开启Edge-to-edge模式——布局默认会延伸到状态栏和导航栏下方,这和targetSDK34及以下的默认行为完全不同:
- targetSDK34时,系统会自动给布局添加内边距避免被系统栏遮挡,同时默认沿用主题的
colorPrimaryDark作为状态栏背景色; - targetSDK35时,系统不再自动处理这些,需要开发者主动适配。
各现象的具体解释
升级后UI被系统栏遮挡:
这是Edge-to-edge强制开启的直接结果,布局不再自动预留系统栏空间,自然会被遮挡。添加
android:fitsSystemWindows="true"后不再遮挡,但状态栏颜色异常:fitsSystemWindows="true"的作用是让布局根据系统栏的尺寸自动添加内边距,解决遮挡问题,但它只负责处理padding,不会设置状态栏的背景色或透明度。升级到targetSDK35后,系统不再默认将colorPrimaryDark应用到状态栏,所以状态栏会显示主题默认的浅色(你的主题是Light风格),导致颜色异常。用DrawerLayout包裹后状态栏颜色恢复正常:
AndroidX的DrawerLayout已经内置了Android 15 Edge-to-edge的适配逻辑:- 它会自动处理
fitsSystemWindows的内边距; - 同时会读取主题中的
colorPrimaryDark,自动设置为状态栏背景色,还会根据主题风格调整状态栏文字的颜色,符合Material Design规范。
- 它会自动处理
不依赖DrawerLayout的解决方案
你可以通过以下方式修复状态栏颜色问题:
方案1:在主题中直接配置状态栏属性
修改styles.xml,给AppTheme添加状态栏相关属性:
<style name="AppTheme" parent="Theme.MaterialComponents.Light.NoActionBar.Bridge"> <!-- 保留原有属性 --> <item name="colorPrimary">@color/colorPrimary</item> <item name="colorPrimaryDark">@color/colorPrimaryDark</item> <item name="colorAccent">@color/colorAccent</item> <item name="colorControlHighlight">@color/colorControlHighlight</item> <item name="colorControlNormal">@color/colorControlNormal</item> <item name="itemBackground">@color/gray</item> <item name="android:actionOverflowButtonStyle">@style/MyOverflowButtonStyle</item> <!-- 添加状态栏配置 --> <item name="android:statusBarColor">@color/colorPrimaryDark</item> <!-- 状态栏文字颜色:false为浅色(对应深色状态栏),true为深色(对应浅色状态栏) --> <item name="android:windowLightStatusBar">false</item> </style>
方案2:在Activity中通过代码设置
在Activity的onCreate方法中添加代码(Kotlin示例):
override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.your_layout) // 设置状态栏背景色为colorPrimaryDark window.statusBarColor = ContextCompat.getColor(this, R.color.colorPrimaryDark) // 配置状态栏文字为浅色(适配深色状态栏) window.insetsController?.setSystemBarsAppearance(0, WindowInsetsController.APPEARANCE_LIGHT_STATUS_BARS) }
内容的提问来源于stack exchange,提问作者Phantom
相关产品推荐
相关产品推荐

