关闭复选框 onCheckedChange Jetpack Compose 上的键盘

问题描述

我正在使用 Jetpack compose,每当我选中该框时,我都试图关闭键盘(TextField 在获得焦点时创建的键盘)。

我有类似的东西:

val focusManager = LocalFocusManager.current

    CheckBox(
        checked = isChecked,onCheckedChange = { isChecked ->
            focusManager.clearFocus()
    })

但是,我发现当我放置断点时,每当我选中/取消选中该框时,focusManager.clearFocus() 都不会一直被调用

是否有一种简单的方法可以在选中复选框时关闭键盘?为什么没有一直调用 onCheckedChange?

解决方法

我认为您不匹配 isChecked 变量。这就是不触发 onCheckedChange 的原因。检查下面的可组合函数。

我添加了一个 TextField。如果单击它,它将获得焦点并打开键盘。在复选框中,我给出的逻辑是,如果选中该复选框,则如果它已经打开,它将关闭键盘。

@Composable
fun checkCheckbox() {
    val textFieldValue = remember { mutableStateOf("") }
    val isChecked = remember { mutableStateOf(false) }

    OutlinedTextField(
        modifier = Modifier
            .fillMaxWidth(),value = textFieldValue.value,onValueChange = { textFieldValue.value = it },label = { Text("Label") }
    )

    val focusManager = LocalFocusManager.current

    Checkbox(
        checked = isChecked.value,onCheckedChange = { checked ->
            Log.e("Check::",checked.toString())
            isChecked.value = checked

            if (checked) {
                Log.e("Focus::","Clear")
                focusManager.clearFocus()
            }
        })
}
,

onCheckedChange 是单击复选框时调用的回调。

如果您想在不清除焦点的情况下关闭键盘,您可以使用 keyboardController?.hide():

var isChecked by remember { mutableStateOf(false) }
val keyboardController = LocalSoftwareKeyboardController.current

Checkbox(
    checked = isChecked,onCheckedChange = { 
        isChecked = it
        keyboardController?.hide()

        //If you want to close the keyboard only if the checkbox is checked
        //if (it) { 
        //    keyboardController?.hide()
        //}
    })

如果您想关闭键盘并清除焦点,请使用:

Checkbox(
    checked = isChecked,onCheckedChange = { 
        isChecked = it
        focusManager.clearFocus()
    })

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...