【问题标题】:How to open a BasicTextField focused with blinking cursor in it?如何打开一个带有闪烁光标的 BasicTextField?
【发布时间】:2022-11-10 23:01:24
【问题描述】:

我的观点之一是BasicTextField。我默认显示软键盘,当我开始在键盘上输入字母时,BasicTextField 中没有显示任何内容,因为它没有光标。

为了使我的键盘操作可见,我必须点击 TextField 以使光标可见。现在,当我点击键盘时,我会在BasicTextField 中看到结果。

如何打开带有活动闪烁光标的 BasicTextField?

编辑:proposed solution from here 对我不起作用

val focusRequester = FocusRequester()
val keyboardController = LocalSoftwareKeyboardController.current

//..

    .focusRequester(focusRequester)
    .onFocusChanged {
        if (it.isFocused) {
            keyboardController?.show()
        }
    }

既没有激活光标也没有使键盘出现。在此之上

DisposableEffect(Unit) {
    focusRequester.requestFocus()
    onDispose { }
}

导致崩溃:

java.lang.IllegalStateException: FocusRequester 未初始化。以下是一些可能的修复:

   1. Remember the FocusRequester: val focusRequester = remember { FocusRequester() }
   2. Did you forget to add a Modifier.focusRequester() ?
   3. Are you attempting to request focus during composition? Focus requests should be made in
   response to some event. Eg Modifier.clickable { focusRequester.requestFocus() }

    at androidx.compose.ui.focus.FocusRequester.requestFocus(FocusRequester.kt:54)

【问题讨论】:

  • this 会回答你的问题吗?
  • @PhilipDukhov 我改变了 OP
  • 你为什么不遵循“可能的修复”?尤其是第一个。
  • @PhilipDukhov 您提供的链接正好有 1 个来自 GabrieleMariotti 的答案,我应用了它。

标签: android-jetpack-compose android-jetpack android-compose-textfield


【解决方案1】:

我让它工作:

val focusRequester = FocusRequester()

//..

.focusRequester(focusRequester)

而不是

DisposableEffect(Unit) {
    focusRequester.requestFocus()
    onDispose { }
}

我用了

LaunchedEffect(Unit) {
    focusRequester.requestFocus()
}

【讨论】:

  • 您的答案中最新块中的 isFocused 是什么?
  • 只是一个布尔标志,您要在哪种情况下聚焦。如果您想在任何情况下集中注意力,请移除。我去掉了恼人的剩菜
猜你喜欢
  • 2013-05-11
  • 2021-04-28
  • 2016-03-18
  • 1970-01-01
  • 1970-01-01
  • 2020-12-14
  • 2023-04-01
  • 2021-11-03
  • 2019-10-17
相关资源
最近更新 更多