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()}
)
)