如何从 Jetpack Compose TextField 关闭虚拟键盘?

新手上路,请多包涵

我正在使用 Jetpack Compose TextField 并且我想在用户按下操作按钮( imeActionPerformed 参数)时关闭虚拟键盘。

 val text = +state { "" }
TextField(
    value = text.value,
    keyboardType = KeyboardType.Text,
    imeAction = ImeAction.Done,
    onImeActionPerformed = {
        // TODO Close the virtual keyboard here <<<
    }
    onValueChange = { s -> text.value = s }
)

原文由 nglauber 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 2.1k
2 个回答

Starting from compose 1.0.0-alpha12 (and still valid in compose 1.3.1 ) the onImeActionPerformed is deprecated and suggested approach is to use keyboardActions with combination of keyboardOptions :

     val focusManager = LocalFocusManager.current

    OutlinedTextField(
        value = ...,
        onValueChange = ...,
        label = ...,
        keyboardActions = KeyboardActions(onDone = { focusManager.clearFocus() }),
        keyboardOptions = KeyboardOptions.Default.copy(imeAction = ImeAction.Done, keyboardType = KeyboardType.Password),
    )

focusManager.clearFocus() 将负责关闭软键盘。

原文由 azizbekian 发布,翻译遵循 CC BY-SA 4.0 许可协议

可以使用 LocalSoftwareKeyboardController 类来控制当前软键盘,然后使用 hide 方法:

 var text by remember { mutableStateOf(TextFieldValue("Text")) }
val keyboardController = LocalSoftwareKeyboardController.current

TextField(
        value = text,
        onValueChange = {
            text = it
        },
        label = { Text("Label") },
        keyboardOptions = KeyboardOptions(imeAction = ImeAction.Done),
        keyboardActions = KeyboardActions(
                onDone = {keyboardController?.hide()})
)

此解决方案关闭键盘 而不 从当前 TextField 移除焦点。

只是为了强调与以下内容的区别:

 val focusManager = LocalFocusManager.current
focusManager.clearFocus()

此代码关闭键盘,从 TextField 移除焦点

原文由 Gabriele Mariotti 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题