Jetpack Compose Textfield OnFocusChangeListener

Rai*_*ker 19 android kotlin android-jetpack-compose

我有一个标准的文本字段,我想知道用户何时在其中设置焦点。有没有办法做到这一点?

我尝试设置可点击修饰符以在有人单击它时触发事件,但看起来它不适用于 TextField:

modifier = Modifier
            .clickable {
                shouldShowSearchKeyBoard.value = true
            },
Run Code Online (Sandbox Code Playgroud)

Rai*_*ker 26

找到了答案。

modifier = Modifier
    .focusRequester(focusRequester)
    .onFocusChanged {
        if (it.isFocused) {
            // focused
        } else {
            // not focused
        }
    },
Run Code Online (Sandbox Code Playgroud)

  • 我不知道这里是否需要 `.focusRequester(focusRequester)`...能否详细说明它的作用?TextField 已经在“.onFocusChanged”上自然地具有焦点事件。询问是因为我这些天也有同样的需求,而且我没有使用任何 `focusRequester` (7认同)

Ded*_*pea 13

声明性范例方法是使用 TextField 交互源中的焦点状态:

val interactionSource = remember { MutableInteractionSource() }
val isFocused by interactionSource.collectIsFocusedAsState()
Run Code Online (Sandbox Code Playgroud)

在您的文本字段中使用它interactionSource

TextField(
    // ...
    interactionSource = interactionSource,
)
Run Code Online (Sandbox Code Playgroud)

现在,您可以isFocused随心所欲地使用状态。