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

Android 13模态底部弹窗显示时Scrim未覆盖状态栏求助

解决Android 13模态底部弹窗Scrim不覆盖状态栏的问题

方案一:动态修改BottomSheetDialog的Window参数

在显示弹窗前,直接配置其Window属性,强制让遮罩延伸到状态栏:

val bottomSheetDialog = BottomSheetDialog(context, R.style.BottomSheetDialogTheme)
bottomSheetDialog.window?.apply {
    // 将状态栏设为透明,让Scrim透出来
    statusBarColor = ContextCompat.getColor(context, android.R.color.transparent)
    // 允许Window延伸到状态栏区域
    setFlags(
        WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS,
        WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS
    )
    // 反转状态栏图标颜色,适配深色Scrim
    decorView.systemUiVisibility = View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR.inv()
}
bottomSheetDialog.show()

方案二:完善ThemeOverlay配置

在自定义的bottomSheetDialogTheme中补充针对Android 13的属性:

<style name="BottomSheetDialogTheme" parent="ThemeOverlay.MaterialComponents.BottomSheetDialog">
    <item name="android:statusBarColor">@android:color/transparent</item>
    <!-- 允许Dialog窗口覆盖刘海/状态栏区域 -->
    <item name="android:windowLayoutInDisplayCutoutMode">shortEdges</item>
    <item name="android:windowTranslucentStatus">true</item>
    <!-- 关闭浅色状态栏图标,适配深色Scrim -->
    <item name="android:windowLightStatusBar">false</item>
    <!-- 自定义Scrim颜色(默认半透明黑可设为#80000000) -->
    <item name="scrimColor">@color/custom_scrim_color</item>
</style>

方案三:BottomSheetDialogFragment场景适配

如果使用BottomSheetDialogFragment,在onCreateDialog方法中做配置:

override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
    val dialog = super.onCreateDialog(savedInstanceState) as BottomSheetDialog
    dialog.window?.apply {
        statusBarColor = ContextCompat.getColor(requireContext(), android.R.color.transparent)
        setFlags(
            WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS,
            WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS
        )
        decorView.systemUiVisibility = View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR.inv()
    }
    return dialog
}

核心原因

Android 13对窗口布局的限制更严格,默认情况下BottomSheetDialog的窗口不会延伸到状态栏区域,导致Scrim无法覆盖。通过设置FLAG_LAYOUT_NO_LIMITS让窗口扩展至全屏,配合透明状态栏,就能让Scrim覆盖状态栏,同时调整图标颜色保证可读性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 05:07:16