Jetpack Compose OutlinedTextField 获得焦点,但没有显示键盘

Wal*_*ann 3 keyboard android focus textfield android-jetpack-compose

我想显示一个对话框并自动将焦点设置到 OutlinedTextField,以便用户可以立即开始输入。
我最终得到的文本字段确实获得焦点,光标确实闪烁,但键盘仍然隐藏。因此,用户仍然必须单击文本字段才能显示键盘。我是这样做的

    LaunchedEffect(Unit) {
        focusRequester.requestFocus()
    }

OutlinedTextField(
                        value = text,
                        modifier = Modifier
                            .focusRequester(focusRequester)
                            .fillMaxWidth(),
                        onValueChange = {
                            text = it
                        }
                    )
Run Code Online (Sandbox Code Playgroud)

Wal*_*ann 5

要使键盘显示,您应该在请求焦点之前设置延迟:

LaunchedEffect(Unit) {
    delay(200)// <-- This is crucial.
    focusRequester.requestFocus()
}

OutlinedTextField(
    value = text,
    modifier = Modifier
        .focusRequester(focusRequester)
        .fillMaxWidth(),
    onValueChange = {
        text = it
    }
)
Run Code Online (Sandbox Code Playgroud)

延迟时间可能会改变。对我来说,它从 100 毫秒开始工作。如果200还是不行,就增加到可以为止。我相信这完全取决于设备的性能,因此延迟越高,可以使用的设备越慢。

  • 您可以在 Android Studio 上使用 shift+tab 将代码片段向左对齐,然后复制并粘贴到此处。 (2认同)