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

如何实现ModalBottomSheet的scrimColor全屏显示且Sheet高度为窗口减状态栏

解决方法

你可以通过以下步骤实现需求:

  1. 保留让scrim覆盖状态栏的windowInsets设置(即BottomSheetDefaults.windowInsets.only(WindowInsetsSides.Bottom))
  2. 获取状态栏高度,给ModalBottomSheet的modifier添加顶部内边距,让整个sheet(包括拖拽柄)下移至状态栏下方
  3. 这样既保证scrim铺满全屏,又能让sheet高度自动适配为窗口高度减去状态栏高度

具体代码示例

import androidx.compose.foundation.layout.padding
import androidx.compose.material3.ModalBottomSheet
import androidx.compose.material3.BottomSheetDefaults
import androidx.compose.material3.Text
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalWindowInsets

// 在Composable函数内部
val statusBarHeight = LocalWindowInsets.current.statusBars.top.dp

ModalBottomSheet(
    sheetState = state,
    onDismissRequest = {},
    windowInsets = BottomSheetDefaults.windowInsets.only(WindowInsetsSides.Bottom),
    modifier = Modifier.padding(top = statusBarHeight)
) {
    Text("Hello World")
}

补充说明

  • 若不想手动计算状态栏高度,也可直接使用WindowInsets.statusBars的padding值,但需注意要作用于整个sheet容器而非仅内容区域
  • 确保你的Activity主题已设置透明状态栏(比如在res/values/styles.xml中添加<item name="android:statusBarColor">@android:color/transparent</item>),否则scrim可能仍无法正常显示在状态栏后方

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 07:46:00