首页 > 解决方案 > 如何从 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 }
)

标签: androidkotlinandroid-jetpack-composeandroid-input-methodandroid-compose-textfield

解决方案


您可以使用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移除焦点。


推荐阅读