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显示时设置状态栏透明+适配的文字颜色,消失后恢复原样式:
- 保留主题中原状态栏配置,不设置透明
- 显示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
相关产品推荐
相关产品推荐

