Jetpack Compose中的OutlinedTextField获取焦点,但没有弹出键盘。

3

我希望显示一个对话框并自动将焦点设置到一个OutlinedTextField,这样用户就可以立即开始输入。
最终结果是文本字段确实获得了焦点,光标也在闪烁,但键盘仍然隐藏。因此,用户仍然需要点击textField才能使键盘出现。 以下是我的做法:

    LaunchedEffect(Unit) {
        focusRequester.requestFocus()
    }

OutlinedTextField(
                        value = text,
                        modifier = Modifier
                            .focusRequester(focusRequester)
                            .fillMaxWidth(),
                        onValueChange = {
                            text = it
                        }
                    )

1
你正在使用AlertDialog吗? - Gabriele Mariotti
@GabrieleMariotti 是的,都在对话框内部,组合名称是“Dialog” - Waldmann
1个回答

5
为了使键盘显示出来,您应该在请求焦点之前放置一个延迟:
LaunchedEffect(Unit) {
    delay(200)// <-- This is crucial.
    focusRequester.requestFocus()
}

OutlinedTextField(
    value = text,
    modifier = Modifier
        .focusRequester(focusRequester)
        .fillMaxWidth(),
    onValueChange = {
        text = it
    }
)

延迟时间可能会改变。对我来说,从100毫秒开始工作。如果使用200仍然无法工作,请增加它直到可以。我相信这与设备的性能有关,因此延迟越高,就可以使用更慢的设备。

你们在将代码从集成开发环境中复制粘贴时,如何让代码更有结构性? - Waldmann
2
你可以在Android Studio中使用shift+tab将代码片段左对齐,然后复制并粘贴到这里。 - Thracian

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接