这是在全屏列中包含 TextField 的 Row。 onFocusChanged
当点击 TextField(进入 Activity 状态)和按下键盘上的 Done 按钮时调用回调。但是处理程序没有被调用,我在 TextField 之外点击。所以我无法关闭键盘。任何想法?
val (nameText, setNameText) = remember { mutableStateOf("")}
val keyboardController = LocalSoftwareKeyboardController.current
val focusRequester = FocusRequester()
Column(
modifier = Modifier
.fillMaxWidth()
.fillMaxHeight()
.padding(10.dp)
) {
Row(
modifier = Modifier
.fillMaxWidth(),
horizontalArrangement = Arrangement.SpaceAround
) {
TextField(
value = nameText,
onValueChange = setNameText,
modifier = Modifier
.focusRequester(focusRequester)
.onFocusChanged {
if (!it.isFocused) {
keyboardController?.hide()
}
}
.padding(horizontal = 0.dp, vertical = 0.dp)
.height(50.dp)
.fillMaxWidth(),
KeyboardOptions(
keyboardType = KeyboardType.Text,
imeAction = androidx.compose.ui.text.input.ImeAction.Done
),
keyboardActions = KeyboardActions(onDone = {
localFocusManager.clearFocus()
}),
placeholder = { Text("Enter a name", fontSize = 14.sp) }
)
}
}
我尝试在 Column 中设置焦点处理程序但没有工作(在外部点击时未调用焦点处理程序)。使用撰写版本 1.0.2。
最佳答案
如果你想移除对点击的关注,你可以添加pointerInput
带有 detectTapGestures
的修饰符给您的Column
:
Column(
modifier = Modifier
.fillMaxWidth()
.fillMaxHeight()
.padding(10.dp)
.pointerInput(Unit) {
detectTapGestures(onTap = {
localFocusManager.clearFocus()
})
}
)
我在 padding
之后添加它修饰符,因此填充 View 部分不会收到触摸。如果您更改顺序,填充将包含在可点击部分中。看other gestures如果水龙头对您来说还不够。
关于android撰写文本字段如何在触摸外部时关闭键盘,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69139853/