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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 04:25:01