gpt4 book ai didi

android - 如何在关闭键盘时清除 TextField 焦点并防止在 Jetpack Compose 中退出应用程序所需的两次后按?

转载 作者:行者123 更新时间:2023-12-04 07:22:47 25 4
gpt4 key购买 nike

我正在使用 BasicTextField。
当我开始编辑时,后退按钮变为隐藏键盘按钮(向下箭头)。
首先按下后退按钮隐藏键盘,但焦点仍在文本字段上。两个onFocusChangedBackPressHandler处理程序没有被调用。
第二次按下后退按钮清除焦点:onFocusChanged被调用并且BackPressHandler不是。

BackHandler {
println("BackPressHandler")
}
val valueState = remember { mutableStateOf(TextFieldValue(text = "")) }
BasicTextField(
value = valueState.value,
onValueChange = {
valueState.value = it
},
modifier = Modifier
.fillMaxWidth()
.onFocusChanged {
println("isFocused ${it.isFocused}")
}
)
第三次 BackHandler 工作正常。只是用于测试,我不应该在这里需要它,它预计在第一次后退按钮点击后焦点会丢失

最佳答案

有一个compose issue带有焦点文本字段可防止后退按钮在键盘隐藏时关闭应用程序。它被标记为已修复,但将包含在某些 future 版本中,而不是 1.0但是,据我了解,在键盘被关闭后文本字段没有失去焦点的事实是 Android 上的预期行为(因为可能连接了键盘?我没有得到原因)。这也是它在旧的 android 布局中的工作方式
这对我来说似乎很奇怪,所以我使用了以下修饰符,当键盘消失时它会放弃焦点:

fun Modifier.clearFocusOnKeyboardDismiss(): Modifier = composed {
var isFocused by remember { mutableStateOf(false) }
var keyboardAppearedSinceLastFocused by remember { mutableStateOf(false) }
if (isFocused) {
val imeIsVisible = LocalWindowInsets.current.ime.isVisible
val focusManager = LocalFocusManager.current
LaunchedEffect(imeIsVisible) {
if (imeIsVisible) {
keyboardAppearedSinceLastFocused = true
} else if (keyboardAppearedSinceLastFocused) {
focusManager.clearFocus()
}
}
}
onFocusEvent {
if (isFocused != it.isFocused) {
isFocused = it.isFocused
if (isFocused) {
keyboardAppearedSinceLastFocused = false
}
}
}
}
p.s.您需要安装 accompanist insets LocalWindowInsets.current.ime 的依赖项
p.s.s. Since撰写 1.2.0-alpha03 , 伴奏插图 大部分被移入 撰写基金会 , 查看 migration guide更多细节。 LocalWindowInsets.current.ime应替换为 WindowInsets.ime .

用法:
BasicTextField(
value = valueState.value,
onValueChange = {
valueState.value = it
},
modifier = Modifier
.clearFocusOnKeyboardDismiss()
)

关于android - 如何在关闭键盘时清除 TextField 焦点并防止在 Jetpack Compose 中退出应用程序所需的两次后按?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68389802/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com