Jetpack Compose中关闭ModalBottomSheetLayout时隐藏软键盘的方法
解决Jetpack Compose中ModalBottomSheetLayout关闭时软键盘未自动收起的问题
在Compose中,可通过LocalSoftwareKeyboardController控制软键盘显隐,配合监听底部弹窗状态变化,就能实现弹窗消失时自动收起软键盘的效果。
解决步骤:
- 通过
LocalSoftwareKeyboardController.current获取软键盘控制器实例 - 使用
LaunchedEffect监听ModalBottomSheetState的状态变化,当弹窗状态变为Hidden时,调用控制器的hide()方法收起软键盘
修改后的完整代码:
@OptIn(ExperimentalMaterialApi::class) @Composable fun ModalBottomSheetSample() { val state = rememberModalBottomSheetState(initialValue = ModalBottomSheetValue.Hidden) val scope = rememberCoroutineScope() val keyboardController = LocalSoftwareKeyboardController.current // 监听弹窗状态变化,触发软键盘隐藏 LaunchedEffect(state.currentValue) { if (state.currentValue == ModalBottomSheetValue.Hidden) { keyboardController?.hide() } } BackHandler(state.isVisible) { scope.launch { state.hide() } } ModalBottomSheetLayout( sheetState = state, sheetContent = { TextField( value = "", onValueChange = {}, placeholder = { Text(text = "Search") }, modifier = Modifier .padding(10.dp) .fillMaxWidth() ) LazyColumn { items(50) { index -> Text( text = "Item $index", modifier = Modifier.padding(16.dp) ) } } } ) { Button(onClick = { scope.launch { state.show() } }) { Text("Click to show sheet") } } }
关键说明:
LocalSoftwareKeyboardController是Compose专属的软键盘控制API,替代了传统Android中的InputMethodManagerLaunchedEffect会在state.currentValue变更时执行逻辑,确保弹窗关闭的时机精准触发软键盘隐藏- 采用
keyboardController?.hide()的空安全调用,避免控制器为空时出现异常
内容的提问来源于stack exchange,提问作者SURYA S R
相关产品推荐
相关产品推荐

