Android 15及以上版本如何修改状态栏颜色?
Android 15 自定义状态栏颜色替代方案(弃用
window.statusBarColor) 在Android 15中,window.statusBarColor被弃用后,可通过在状态栏Insets区域绘制自定义背景的方式实现纯色状态栏,完全不依赖明暗主题,直接设置红、绿等自定义颜色。
核心实现步骤(View系统)
- 关闭系统自动布局适配,让布局延伸至状态栏区域
- 添加专门的View作为状态栏背景
- 通过
WindowInsets获取状态栏高度,动态调整背景View尺寸 - 给内容布局设置padding,避免被状态栏遮挡
代码示例
在Activity的onCreate方法中添加以下代码:
// 关闭系统自动适配,让布局延伸到状态栏下方 window.setDecorFitsSystemWindows(false) val rootView = findViewById<ViewGroup>(android.R.id.content) // 创建状态栏背景View,设置自定义颜色 val statusBarBg = View(this) statusBarBg.setBackgroundColor(Color.RED) // 替换为你需要的颜色,比如Color.GREEN rootView.addView(statusBarBg, ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, 0)) // 监听WindowInsets,获取状态栏高度并调整背景View rootView.setOnApplyWindowInsetsListener { view, insets -> val statusBarInsets = insets.getInsets(WindowInsets.Type.statusBars()) // 设置状态栏背景View的高度为状态栏实际高度 statusBarBg.layoutParams.height = statusBarInsets.top // 给内容根布局设置顶部padding,避免内容被状态栏覆盖 view.setPadding( view.paddingLeft, statusBarInsets.top, view.paddingRight, view.paddingBottom ) // 标记状态栏Insets已被处理 insets.consume(WindowInsets.Type.statusBars()) }
注意事项
- 如果布局已使用
android:fitsSystemWindows="true",需移除该属性,否则setDecorFitsSystemWindows(false)可能不生效 - 若需要状态栏透明,只需将
statusBarBg背景色设为Color.TRANSPARENT - 该方案兼容Android 11及以上版本(含Android 15),如需兼容更低版本,可配合
ViewCompat.setOnApplyWindowInsetsListener做兼容处理
内容的提问来源于stack exchange,提问作者aj3423
相关产品推荐
相关产品推荐

