【问题标题】:TextField loses focus when hidden by IMETextField 在被 IME 隐藏时失去焦点
【发布时间】:2022-11-21 16:57:40
【问题描述】:

我有一个 lazyList 项目,我在其中显示了一个数字。当用户按下数字时,我会显示一个 TextField,以便用户可以编辑数字。

但是,如果我想编辑一个数字在 IME 出现的位置下方, textfield 将立即失去焦点并触发 showNumber 方法。

我像这样显示/隐藏数字/文本字段:

if (isEditing) ExpenseTextField() {
    isEditing = false // onConfirmInput
} else ExpenseDisplay() {
    isEditing = true  // onClickNumber
}

在 TextField 中,我正在监听焦点状态,并在失去焦点时触发 onConfirmInput

modifier = Modifier
            .focusRequester(focusRequester)
            .onFocusChanged { state ->
                inFocus = state.hasFocus
                coroutineScope.launch {
                    delay(50)
                    if (!inFocus)
                        onConfirmInput()
                }
            },

我必须加上delay(50),因为焦点状态会多次触发,我只能等一下才能得到最新的。

这是输出:

如您所见,所需的效果适用于大多数元素,但不适用于将被 IME 重叠的底部元素。

【问题讨论】:

    标签: android-jetpack-compose


    【解决方案1】:

    这是常见问题,这是一个谷歌问题跟踪器: https://issuetracker.google.com/issues/179203700

    如果您想解决这个问题,那么您可以在列表底部添加填充,然后始终滚动到您单击的项目。这样它会一直跳到顶部并且键盘会保持打开状态。

    【讨论】:

      猜你喜欢
      • 2012-03-31
      • 2020-05-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-07
      • 2012-01-11
      • 1970-01-01
      相关资源
      最近更新 更多