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

Jetpack Compose中如何让Material3 ModalBottomSheet不可拖动且内部内容可滚动

禁用Material3 ModalBottomSheet拖动并保留内部列表滚动

要完全解决ModalBottomSheet与内部可滚动列表的手势冲突问题,最直接且无需自定义组件的方案是在创建ModalBottomSheetState时设置enableDrag = false,彻底关闭Sheet的拖动手势识别:

val sheetState = rememberModalBottomSheetState(
    skipPartiallyExpanded = true,
    enableDrag = false // 核心配置:禁用Sheet的拖动功能
)

ModalBottomSheet(
    sheetState = sheetState,
    onDismissRequest = {}, // 根据业务需求处理关闭逻辑
    dragHandle = null // 可选:移除默认拖动手柄,强化不可拖动的视觉提示
) {
    // 内部可滚动列表示例(LazyColumn)
    LazyColumn {
        items(50) { index ->
            Text(text = "列表项 $index", modifier = Modifier.padding(16.dp))
        }
    }
}

关于你之前尝试方案的补充说明

你使用confirmValueChange的方式仅能阻止Sheet被隐藏,但无法禁用拖动的交互反馈(比如拖动后弹回的动画)。而enableDrag = false会直接关闭Sheet的整个拖动手势逻辑,让所有垂直手势都由内部可滚动组件(如LazyColumn、ScrollableColumn)处理,从根源上避免手势冲突。

额外提示

  • 若需要保留Sheet的关闭功能,可通过按钮等组件手动调用sheetState.hide(),或在onDismissRequest中实现自定义关闭逻辑。
  • 设置enableDrag = false后,用户无法通过拖动操作改变Sheet的展开/收起状态,完全符合你仅让内部列表响应滚动的需求。

内容的提问来源于stack exchange,提问作者Stanisław Olszak

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.02 04:04:51