JetPack Compose 禁用 BottomSheet 外部触摸

Fir*_*ger 9 android android-jetpack android-jetpack-compose

我正在使用Accompanist 的 BottomSheetNavigator在 Compose 应用程序中显示 BottomSheet。要求是禁用底部工作表之外的触摸事件,并且仅对按钮单击事件执行操作。没有类似的方法setCancelable(false)setCanceledOnTouchOutside(false)在非 Compose 应用程序中使用的方法。

例如。在图中,仅当用户单击“立即应用”按钮时才应执行操作,如果用户单击设备后退按钮或触摸底部表外部,则不应执行任何操作。有什么办法可以实现上述功能吗?

Gab*_*tti 34

使用 aModalBottomSheetLayout您可以指定sheetState参数。
里面ModalBottomSheetState有参数confirmStateChange

调用可选回调来确认或否决待处理的状态更改。

你可以使用类似的东西:

val state = rememberModalBottomSheetState(
    initialValue= ModalBottomSheetValue.Hidden, 
    confirmStateChange = {false})
Run Code Online (Sandbox Code Playgroud)

通过这种方式,您可以触摸 Bottomsheet 的外部,而无需关闭它。
在“立即申请”按钮中只需使用:

onClick = { scope.launch { state.hide() } }
Run Code Online (Sandbox Code Playgroud)

  • 不推荐使用confirmStateChange,现在您应该使用confirmValueChange (2认同)