如何阻止Jetpack Compose中Modal Bottom Sheet下滑关闭
仅允许点击图标关闭Modal Bottom Sheet的解决方案
要禁用Modal Bottom Sheet的下滑关闭行为,只保留关闭图标触发关闭,只需做以下两处修改:
1. 禁用拖拽关闭功能
在rememberModalBottomSheetState中添加isDraggable = false,直接取消面板的拖拽交互:
val previewSheetState = rememberModalBottomSheetState( skipPartiallyExpanded = false, isDraggable = false // 禁止拖拽下滑关闭 )
2. 可选:限制仅图标触发关闭(禁用外部点击关闭)
如果需要完全只通过关闭图标关闭面板,把onDismissRequest里的逻辑注释掉或清空,避免点击面板外部触发关闭:
onDismissRequest = { // 移除原有回调,禁止外部点击关闭 // onBottomSheetDismiss(false) },
另外注意修正LazyColumn的列表项显示逻辑,原代码里固定显示"it",应该改为显示列表的实际元素:
LazyColumn { items(list) { item -> Text(text = item) } }
修改后的完整代码
fun Preview( list: List<String>, onBottomSheetDismiss: (Boolean) -> Unit, ) { val scope = rememberCoroutineScope() val previewSheetState = rememberModalBottomSheetState( skipPartiallyExpanded = false, isDraggable = false ) ModalBottomSheet( onDismissRequest = { // 若允许外部点击关闭,取消注释下面一行 // onBottomSheetDismiss(false) }, sheetState = previewSheetState, modifier = Modifier.height(700.dp), dragHandle = { Column { Row( Modifier .fillMaxWidth() .background(Color.White) .padding(start = 15.dp, top = 10.dp, bottom = 5.dp, end = 10.dp), Arrangement.SpaceBetween, Alignment.CenterVertically ) { Text(text = "Preview") CloseIcon(onClick = { scope.launch { previewSheetState.hide() onBottomSheetDismiss(false) } }) } HorizontalDivider(thickness = 1.dp) } } ) { LazyColumn { items(list) { item -> Text(text = item) } } } }
内容的提问来源于stack exchange,提问作者Pawandeep Singh
相关产品推荐
相关产品推荐

