【问题标题】:Android Compose show and hide keyboardAndroid Compose 显示和隐藏键盘
【发布时间】:2021-09-09 21:15:51
【问题描述】:

我有一个 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

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

【问题讨论】:

    标签: android kotlin android-jetpack-compose


    【解决方案1】:

    您可以对状态更改执行一些操作,并且可以使用side effects 来执行此操作。
    例如,您可以使用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()方法关闭键盘并清除焦点。

    【讨论】:

      【解决方案2】:

      要添加 Gabriele 的答案,您需要 val focusRequester = remember { FocusRequester() } 否则你会得到一个例外

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-04-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多