srv*_*rvy 16 android android-jetpack-compose
这是一个在全屏列中包含 TextField 的行。onFocusChanged当点击文本字段(进入活动状态)以及按下键盘上的“完成”按钮时,将调用回调。但当我在 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) }
)
}
}
Run Code Online (Sandbox Code Playgroud)
我尝试在列中设置焦点处理程序,但不起作用(点击外部时未调用焦点处理程序)。使用 compose 版本 1.0.2。
Phi*_*hov 38
如果您想删除点击焦点,您可以将pointerInput修饰符添加detectTapGestures到您的Column:
Column(
modifier = Modifier
.fillMaxWidth()
.fillMaxHeight()
.padding(10.dp)
.pointerInput(Unit) {
detectTapGestures(onTap = {
localFocusManager.clearFocus()
})
}
)
Run Code Online (Sandbox Code Playgroud)
我将其添加在padding修饰符之后,因此填充视图部分不会接收触摸。如果更改顺序,可点击部分中将包含填充。
如果点击对您来说还不够,请查看其他手势。
| 归档时间: |
|
| 查看次数: |
10913 次 |
| 最近记录: |