Jetpack Compose 文本框 OnFocusChangeListener

16

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

我尝试使用clickable修饰符,在某人点击它时触发事件,但看起来它不能与TextField一起使用:

modifier = Modifier
            .clickable {
                shouldShowSearchKeyBoard.value = true
            },
2个回答

25

找到答案了。

modifier = Modifier
    .focusRequester(focusRequester)
    .onFocusChanged {
        if (it.isFocused) {
            // focused
        } else {
            // not focused
        }
    },

7
我不确定这里是否需要.focusRequester(focusRequester)...能否详细说明一下它的作用?TextField已经在.onFocusChanged上自然地具有焦点事件。之所以问是因为我最近也有同样的需求,但我没有使用任何focusRequester - Pstr
我没有看到TextField有onFocusChanged事件。在我的情况下,当焦点改变时(即不需要点击onImeAction按钮),我想确保键盘被关闭。 - mobibob

9
声明式编程的方式是使用TextField的交互源中的焦点状态。
val interactionSource = remember { MutableInteractionSource() }
val isFocused by interactionSource.collectIsFocusedAsState()

在您的TextField中使用这个interactionSource。
TextField(
    // ...
    interactionSource = interactionSource,
)

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接