如何使用 jetpack compose 设置按钮的焦点状态?

2024-01-03

compose_version = '1.0.0-beta02'。

我可以通过 FocusRequester 设置焦点状态 TextField,但 Button 不能。

        val requester1 = FocusRequester()
       
        TextField(value = text1,
            { newValue ->
                text1 = newValue
            },
            modifier = Modifier
                .focusable(true)
                .focusRequester(requester1)
                .background(focusedColor1)
                .onFocusChanged {
                    focusedColor1 = if (it.isFocused) {
                        text1 = "TextField1 focused"
                        Color.Red
                    } else {
                        text1 = "TextField1 unfocused"
                        Color.Green
                    }
                }

        )

将调用 TextField 的“onFocusChanged”方法。

        val requester3 = FocusRequester()
        Button(
            onClick = {
                requester3.requestFocus()

            },
            modifier = Modifier
                .focusModifier()
                .focusable(true)
                .focusRequester(requester3)
                .onFocusEvent {
                    Toast
                        .makeText(
                            context,
                            "Button onFocusEvent it.isFocused:${it.isFocused}. ${it.name}",
                            Toast.LENGTH_SHORT
                        )
                        .show()
                }
                .onFocusChanged {
                    Toast
                        .makeText(
                            context,
                            "Button onFocusChanged it.isFocused:${it.isFocused}",
                            Toast.LENGTH_SHORT
                        )
                        .show()
                }.background(Color.Red)

        ) {
            Text(text = text2,Modifier.background(Color.Red))
        }

但是Button的onFocusChanged方法不会被调用。


使用类似的东西:

val focusRequester = FocusRequester()
val interactionSource = remember { MutableInteractionSource() }
val isFocused = interactionSource.collectIsFocusedAsState().value
// if (isFocused....)

Button(
    onClick = {
        focusRequester.requestFocus()
    },
    modifier = Modifier
        // add focusRequester modifier before the focusable (or even in the parent)
        .focusRequester(focusRequester)
        .focusable(interactionSource = interactionSource)
 ){ ...  }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 jetpack compose 设置按钮的焦点状态? 的相关文章

随机推荐