我目前使用的是compose_version = '1.0.2'
。
当你点击“下一个”按钮时,焦点不会移动,因为尽管默认键盘操作是将焦点移动到下一个,但Compose似乎不知道下一个应该是哪个。为每个项目创建FocusRequester
并通过Modifier.focusOrder() {}
设置它们的焦点顺序可能有效(顺便说一句,如果你选择此方法,则不需要将keyboardActions
的onNext
设置为请求焦点),但是由于你的TextField
都在同一个Column
中,所以可以只设置keyboardActions
以告诉Compose将焦点向下移动到下一个文本框。像这样:
Column {
val focusManager = LocalFocusManager.current
TextField(
value = "", onValueChange = {},
keyboardOptions = KeyboardOptions( imeAction = ImeAction.Next ),
keyboardActions = KeyboardActions(
onNext = { focusManager.moveFocus(FocusDirection.Down) }
)
)
TextField(
value = "", onValueChange = {},
keyboardOptions = KeyboardOptions( imeAction = ImeAction.Next ),
keyboardActions = KeyboardActions(
onNext = { focusManager.moveFocus(FocusDirection.Down) }
)
)
TextField(
value = "", onValueChange = {},
keyboardOptions = KeyboardOptions( imeAction = ImeAction.Next ),
keyboardActions = KeyboardActions(
onNext = { focusManager.moveFocus(FocusDirection.Down) }
)
)
}
在你完成这个步骤之后,IME键盘上的下一步按钮应该可以正常使用。
对于 Tab 键,由于 TextField
不会自动处理 Tab 键,因此您可能希望在 Modifier.onKeyEvent{}
中使用 focusManager
以与上面的示例相同的方式移动焦点。
it.key.keyCode == Key.Tab.keyCode
,而是可以直接使用it.key == Key.Tab
,但是如果您想避免实验性API选择,则可以改为使用it.nativeKeyEvent.keyCode == KeyEvent.KEYCODE_TAB
。此外,最好使用Modifier.onPreviewKeyEvent
,因为Modifier.onKeyEvent
在传播按键事件之前调用onValueChange
,所以您可能会遇到这样的情况:您刚刚离开的TextField现在具有用户不知道的额外制表符。 - omiwrenchkeyboardActions
。 - k4dima