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

CookieBar2顶部显示被状态栏遮挡,不同设备适配问题求助

CookieBar2 被状态栏遮挡及状态栏文字显示冲突问题解决

问题描述

我使用CookieBar2在屏幕顶部展示Cookie栏,代码如下:

CookieBar.build(this@AppAdActivity)
    .setTitle("TITLE")
    .setMessage("MESSAGE")
    .setDuration(10000)
    .setBackgroundColor(R.color.app_blue)
    .show()

但Cookie栏顶部被状态栏遮挡(左图为异常效果,右图为期望效果):
异常效果 期望效果

我的theme.xml配置:

<style name="Theme.MyApp" parent="Theme.MaterialComponents.Light.DarkActionBar">
    <!-- Colors -->
    <item name="colorPrimary">@color/app_blue</item>
    <item name="colorPrimaryVariant">@color/app_bg_color</item>
    <item name="colorOnPrimary">@color/white</item>
    <item name="colorSecondary">@color/app_blue</item>
    <item name="colorSecondaryVariant">@color/app_bg_color</item>
    <item name="colorOnSecondary">@color/white</item>

    <item name="windowNoTitle">true</item>
</style>

添加状态栏透明配置后,遮挡问题解决,但Cookie栏消失后,状态栏文字(时钟等)与白色页面背景冲突无法显示:

<item name="android:statusBarColor">@android:color/transparent</item>

状态栏文字冲突效果

补充:我的手机(状态栏较小)显示正常,但Google Pixel 8 Pro模拟器(状态栏稍大)存在该问题。


解决方案

方法一:手动给CookieBar添加状态栏高度的内边距

无需修改主题,直接获取状态栏高度并设置为CookieBar的顶部内边距:

// 获取系统状态栏高度
val statusBarHeight = resources.getDimensionPixelSize(
    resources.getIdentifier("status_bar_height", "dimen", "android")
)

CookieBar.build(this@AppAdActivity)
    .setTitle("TITLE")
    .setMessage("MESSAGE")
    .setDuration(10000)
    .setBackgroundColor(R.color.app_blue)
    .setTopPadding(statusBarHeight) // 添加状态栏高度的顶部内边距
    .show()

方法二:动态切换状态栏样式(推荐)

在CookieBar显示时设置状态栏透明+适配的文字颜色,消失后恢复原样式:

  1. 保留主题中原状态栏配置,不设置透明
  2. 显示CookieBar时的代码:
import android.os.Build
import android.view.View
import androidx.core.content.ContextCompat

// 显示CookieBar前调整状态栏
window.statusBarColor = ContextCompat.getColor(this, android.R.color.transparent)
// Android 6.0+设置状态栏文字为深色(适配CookieBar的深色背景)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
    window.decorView.systemUiVisibility = View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR
}

CookieBar.build(this@AppAdActivity)
    .setTitle("TITLE")
    .setMessage("MESSAGE")
    .setDuration(10000)
    .setBackgroundColor(R.color.app_blue)
    .setListener(object : CookieBar.CookieBarListener {
        override fun onActionClicked(cookieBar: CookieBar) {
            restoreStatusBar()
        }
        override fun onDismissed(cookieBar: CookieBar, byAction: Boolean) {
            restoreStatusBar()
        }
    })
    .show()

// 恢复状态栏原样式的方法
private fun restoreStatusBar() {
    window.statusBarColor = ContextCompat.getColor(this, R.color.app_blue)
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
        window.decorView.systemUiVisibility = 0
    }
}

方法三:使用CookieBar内置适配(如果版本支持)

部分CookieBar2版本提供了自动适配状态栏的方法,直接调用即可:

CookieBar.build(this@AppAdActivity)
    .setTitle("TITLE")
    .setMessage("MESSAGE")
    .setDuration(10000)
    .setBackgroundColor(R.color.app_blue)
    .setAutoPadding(true) // 自动适配状态栏边距
    .show()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 03:35:12