Material3 Jetpack Compose:手动隐键盘后TextField未失焦无法重唤键盘
解决Material3 TextField手动隐藏键盘后无法再次唤起的问题
这是Material3 Jetpack Compose 1.2.0-beta02版本的已知bug,不是你的代码实现问题,不少开发者都碰到过同款情况。以下是几种可行的修复方案:
手动管理焦点与键盘状态
借助FocusRequester、LocalFocusManager和LocalSoftwareKeyboardController,监听键盘可见性变化,在键盘隐藏时主动清除TextField的焦点。示例代码:val focusRequester = remember { FocusRequester() } val keyboardController = LocalSoftwareKeyboardController.current val focusManager = LocalFocusManager.current TextField( value = "", onValueChange = {}, modifier = Modifier.focusRequester(focusRequester) ) val windowInsets = LocalWindowInsets.current LaunchedEffect(windowInsets.ime.isVisible) { if (!windowInsets.ime.isVisible) { focusManager.clearFocus() } }升级依赖版本
该问题在Material3 Jetpack Compose 1.2.0正式版及后续版本中已经被官方修复,直接升级到稳定版本是最省心的解决方式。临时点击触发方案
给TextField添加点击事件,当它已有焦点但键盘不可见时,手动唤起键盘并重新请求焦点:val focusRequester = remember { FocusRequester() } val keyboardController = LocalSoftwareKeyboardController.current val windowInsets = LocalWindowInsets.current TextField( value = "", onValueChange = {}, modifier = Modifier .focusRequester(focusRequester) .clickable { val hasFocus = LocalFocusManager.current.focusedChild?.focusRequester == focusRequester if (hasFocus && !windowInsets.ime.isVisible) { keyboardController?.show() focusRequester.requestFocus() } } )
内容的提问来源于stack exchange,提问作者Adria Fernandez
相关产品推荐
相关产品推荐

