JetPack Compose 如何禁用 BottomSheet 外部触摸?

9
我正在使用Accompanist's BottomSheetNavigator在Compose应用程序中显示BottomSheet。要求是禁用Bottom Sheet外部的触摸事件,仅在按钮点击事件上执行操作。在非Compose应用程序中没有像setCancelable(false)setCanceledOnTouchOutside(false)这样的方法。

例如,在this图像中,只有当用户点击“立即申请”按钮时才会执行操作,如果用户点击设备后退按钮或触摸Bottomsheet外部,则不会执行任何操作。是否有办法实现所述功能?
1个回答

33
使用ModalBottomSheetLayout,您可以指定sheetState参数。
ModalBottomSheetState中有一个参数confirmStateChange

可选的回调函数,用于确认或否决待处理的状态更改。

您可以使用类似以下的方式:

val state = rememberModalBottomSheetState(
    initialValue= ModalBottomSheetValue.Hidden, 
    confirmStateChange = {false})

以这种方式,您可以在不关闭底部菜单的情况下触摸其外部。
在您的“立即申请”按钮中只需使用:
onClick = { scope.launch { state.hide() } }

1
这应该是被接受的答案。 - Prasoon Abhishek
1
不错的解决方案。在找到你的答案之前,我花了很多时间。这应该是被接受的答案。 - Ahsan Ullah Rasel
2
confirmStateChange现已被弃用,现在应该使用confirmValueChange。 - crack_head
这会导致意外的行为。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接