Android 在Jetpack Compose中设置对焦顺序的最简单方法是什么?

Android 在Jetpack Compose中设置对焦顺序的最简单方法是什么?,android,android-jetpack-compose,android-jetpack-compose-text,Android,Android Jetpack Compose,Android Jetpack Compose Text,我有一列文本字段,类似于: 列{ 文本字段( 值=。。。, onValueChange={…}, 键盘选项=键盘选项(imeAction=imeAction.next), ) 文本字段( 值=。。。, onValueChange={…}, 键盘选项=键盘选项(imeAction=imeAction.next), ) . . . } 我希望在用户按Tab键或键盘上的next按钮时,将每个文本字段的焦点移到下一个。当前按Tab键可将选项卡插入文本字段。按“下一步”按钮不起任何作用。我可以为每个文本

我有一列文本字段,类似于:

列{
文本字段(
值=。。。,
onValueChange={…},
键盘选项=键盘选项(imeAction=imeAction.next),
)
文本字段(
值=。。。,
onValueChange={…},
键盘选项=键盘选项(imeAction=imeAction.next),
)
.
.
.
}

我希望在用户按Tab键或键盘上的next按钮时,将每个文本字段的焦点移到下一个。当前按Tab键可将选项卡插入文本字段。按“下一步”按钮不起任何作用。我可以为每个文本字段创建一个FocusRequester,并将键盘操作设置为onNext,以便为每个字段请求下一个字段的焦点。这有点乏味,而且它没有解决选项卡行为。

不确定这是否是更简单的方法,但您可以为每个字段创建一个
FocusRequester
对象,并按照您想要的顺序请求焦点

@Composable
趣味焦点请求屏幕(){
//创建FocusRequesters…(可以使用createRefs函数)
val focusRequesters=List(3){FocusRequester()}
纵队{
TextFieldWithFocusRequesters(focusRequesters[0],focusRequesters[1])
TextFieldWithFocusRequesters(focusRequesters[1],focusRequesters[2])
TextFieldWithFocusRequesters(focusRequesters[2],focusRequesters[0])
}
}
@组合的
具有焦点请求者的私人趣味文本字段(
焦点请求者:焦点请求者,
下一个焦点请求者:焦点请求者
) {
可记忆变量状态{
可变状态(“焦点转移测试”)
}
文本字段(
值=状态,
onValueChange={text->state=text},
//这就是你想要的。。。
修饰语=修饰语
.focusOrder(focusRequester){
nextFocusRequester.requestFocus()
}
,
键盘选项=键盘选项(imeAction=imeAction.Next)
)
}

我从你那里得到这个密码。但这并没有解决账单问题…:(

关于订单,您可以查看

要使用Tab键,可以使用


不幸的是,如果键盘覆盖了聚焦的
TextField
,此解决方案不会将屏幕向上移动…有什么线索可以实现吗?
TextField(
    modifier = Modifier
        .focusRequester(focusRequester)
        .onKeyEvent {
            if (it.key.keyCode == Key.Tab.keyCode){
                focusRequesterNext.requestFocus()
                true //true -> consumed
            } else false },
    value = text,
    onValueChange = { it -> text = it },
    keyboardOptions = KeyboardOptions(imeAction = ImeAction.Next),
    keyboardActions = KeyboardActions(
        onNext = {focusRequesterNext.requestFocus()}
        )
)