问题描述
我正在使用 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()
})