Jetpack Compose与Talkback的焦点顺序

3

根据文档:https://developer.android.com/reference/kotlin/androidx/compose/ui/focus/package-summary#(androidx.compose.ui.Modifier).focusOrder(kotlin.Function1)

我想为Column设置自定义的焦点顺序。

我已经按照文档中指示的将不同的焦点请求器分配给每个项,并指定了要聚焦的next项,但似乎Talkback正在忽略我的元素焦点顺序。

以下是一个示例:

                val focusRequesters = remember { List(4) { FocusRequester() } }
                Column {
                    Text("Line 1",
                        Modifier
                            .focusOrder(focusRequesters[0]) {
                                next = focusRequesters[2]
                                down = focusRequesters[2]
                                right = focusRequesters[2]
                            }
                            .focusable())
                    Text("Line 2",
                        Modifier
                            .focusOrder(focusRequesters[1]) {
                                next = focusRequesters[0]
                                down = focusRequesters[0]
                                right = focusRequesters[0]
                            }
                            .focusable())
                    Text("Line 3",
                        Modifier
                            .focusOrder(focusRequesters[2]) {
                                next = focusRequesters[3]
                                down = focusRequesters[3]
                                right = focusRequesters[3]
                            }
                            .focusable())
                    Text("Line 4",
                        Modifier
                            .focusOrder(focusRequesters[3]) {
                                next = focusRequesters[1]
                                down = focusRequesters[1]
                                right = focusRequesters[1]
                            }
                            .focusable())
                }

尝试将nextdownright组合使用以及单独使用,但似乎都不能改变可访问遍历顺序。
1个回答

3

如果您使用LocalFocusManager更改聚焦顺序,将会考虑到聚焦顺序的顺序,例如:

LocalFocusManager.current.moveFocus(FocusDirection.Next)

但这与可访问性无关。在Compose中似乎还没有android:accessibilityTraversalAfter的替代品,请参考此问题了解详情。


实际上,这是为了不让用户感到困惑而进行的更改,因为有时自然顺序并不合理。您已经可以使用 android:accessibilityTraversalAfterBeforeView 中执行此操作。对于 LocalFocusManager,似乎需要键盘操作/选项来触发 Nexd 事件,但它们不响应 Talkback 的“下一个”事件。 - Roudi

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