首页 > 解决方案 > Android Compose 显示和隐藏键盘

问题描述

我有一个可组合的功能TextField

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

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

我尝试在可组合内使用 livedata:

val shouldShowKeyBoard by shouldShowSearchKeyBoard.observeAsState()

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

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

标签: androidkotlinandroid-jetpack-compose

解决方案


您可以对状态更改执行一些操作,并且可以使用副作用来执行此操作。
例如,您可以使用该LaunchedEffect功能,其中key您可以传递一个您想要收听的状态。

LaunchedEffect(booleanValue) {
    //...do something
}

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

val focusRequester = FocusRequester()
LaunchedEffect(viewModel.showKeyboard) {
    focusRequester.requestFocus()
}

TextField(
    value = text,
    onValueChange = {
        text = it },
    modifier = Modifier
        // add focusRequester modifier
        .focusRequester(focusRequester)
)

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

   val keyboardController = LocalSoftwareKeyboardController.current

   TextField(
     //...
     keyboardActions = KeyboardActions(
        onSearch = { keyboardController?.hide() }
    )

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


推荐阅读