【发布时间】: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 重叠的底部元素。
【问题讨论】: