要解决Android Compose中关闭底部弹窗时屏幕冻结的问题,可以使用以下代码示例:
首先,创建一个自定义的Composable函数,用于显示底部弹窗:
@Composable
fun BottomSheetDialog(
showDialog: Boolean,
onCloseDialog: () -> Unit
) {
if (showDialog) {
Dialog(onDismissRequest = { onCloseDialog() }) {
// 弹窗内容
}
}
}
接下来,在主界面的Composable函数中,使用ModalBottomSheetLayout
包裹整个布局,并将showDialog
和onCloseDialog
传递给BottomSheetDialog
函数:
@Composable
fun MainActivityScreen() {
var showDialog by remember { mutableStateOf(false) }
ModalBottomSheetLayout(
sheetState = rememberModalBottomSheetState(ModalBottomSheetValue.Hidden),
sheetContent = {
BottomSheetDialog(
showDialog = showDialog,
onCloseDialog = { showDialog = false }
)
}
) {
// 主界面布局
// ...
// 显示底部弹窗按钮
Button(
onClick = { showDialog = true }
) {
Text("显示底部弹窗")
}
}
}
最后,确保在MainActivity
中设置使用setContent
函数显示MainActivityScreen
:
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
MainActivityScreen()
}
}
}
现在,当点击"显示底部弹窗"按钮时,底部弹窗将显示出来。当用户拖动或按下返回按钮时,弹窗将关闭,并且屏幕不会冻结。