You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 06:32:09