android撰写文本字段如何在触摸外部时关闭键盘

标签 android android-jetpack-compose

这是在全屏列中包含 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/

相关文章:

android - 如何将 androidx.compose.ui.graphics.Color 转换为 android.graphics.Color (int)

android - 如何将 Service 与 BroadcastReceiver 结合使用?

android - Kotlin 1.6、Jetpack Compose 1.1.0 编译错误

android-jetpack-compose - 检测逆时针旋转输入,Wear OS Jetpack Compose

android - 不带省略号的 AlertDialog 标题

performance - Jetpack Compose 中的字母滚动条

android-jetpack-compose - LaunchedEffect 在配置更改时执行,即使 rememberUpdatedState 没有更改

android - 返回 Activity 时为空指针

Android 开发 : Thread. sleep just slow down game

android - Android 2.3 中的 map 版本 2