Android Compose 显示和隐藏键盘

Rai*_*ker 4 android kotlin android-jetpack-compose

我有一个可组合函数TextField

val focusManager = LocalFocusManager.current
TextField(
        keyboardOptions = KeyboardOptions.Default.copy(
            imeAction = ImeAction.Search,
        ),
        keyboardActions = KeyboardActions(
            onSearch = {
                focusManager.clearFocus()
            }
        )
    )
Run Code Online (Sandbox Code Playgroud)

当我单击不属于可组合内容的其他按钮时,我需要从可组合函数内部以及外部显示键盘。基本上我想从我的片段中调用hideKeyboard()

我尝试在可组合项中使用 livedata:

val shouldShowKeyBoard by shouldShowSearchKeyBoard.observeAsState()
Run Code Online (Sandbox Code Playgroud)

我可以focusManager.clearFocus()隐藏键盘,但我不确定如何以编程方式显示特定的组合TextField

管理隐藏/显示键盘的“撰写”方式是什么?

Gab*_*tti 17

您可以对状态更改执行一些操作,并且可以使用副作用来完成此操作。
例如,您可以使用该LaunchedEffect函数,作为 akey您可以传递您想要侦听的状态。

LaunchedEffect(booleanValue) {
    //...do something
}
Run Code Online (Sandbox Code Playgroud)

您可以使用 ViewModel 来设置布尔值,例如:

// initialize focus reference to be able to request focus programmatically
val focusRequester = remember { FocusRequester() }
LaunchedEffect(viewModel.showKeyboard) {
    focusRequester.requestFocus()
}

TextField(
    value = text,
    onValueChange = {
        text = it },
    modifier = Modifier
        // add focusRequester modifier
        .focusRequester(focusRequester)
)
Run Code Online (Sandbox Code Playgroud)

请注意:要隐藏键盘,您还可以使用:

   val keyboardController = LocalSoftwareKeyboardController.current

   TextField(
     //...
     keyboardActions = KeyboardActions(
        onSearch = { keyboardController?.hide() }
    )
Run Code Online (Sandbox Code Playgroud)

使用该方法focusManager.clearFocus()关闭键盘并清除焦点。