返回

Android TV 上 Jetpack Compose 遍历顺序:常见问题解答和解决方法

Android

在 Android TV 上使用 Jetpack Compose 的无障碍遍历顺序

引言

无障碍功能对于 Android TV 体验至关重要,它允许用户使用各种输入设备与他们的电视进行交互。Jetpack Compose 是一种现代 UI 工具包,可以轻松构建无障碍丰富的 Android TV 应用。

问题:不正确的遍历顺序

启用 Android TV 的无障碍功能后,在使用 Jetpack Compose 构建的应用中获取正确的遍历顺序可能会遇到困难。这可能会导致屏幕阅读器在错误的顺序中朗读项目,给用户造成困惑。

解决方案:修改语义

要解决这个问题,需要修改应用中某些 Compose 语义:

  • isTraversalGroup 语义添加到各个 TextButton 组件中,而不是添加到 TvLazyRow 中。
  • traversalIndex 语义添加到各个 TextButton 组件中,并将其设置为浮点数,以便与列表中项目的顺序相匹配。

修改后的代码

@Composable
fun MainScreen3() {
    Column(
        modifier = Modifier.fillMaxWidth(),
        verticalArrangement = Arrangement.Center,
        horizontalAlignment = Alignment.CenterHorizontally
    ) {
        Text(
            text = "This is a heading 3",
            modifier = Modifier.semantics {
                heading()
            }
        )
        TvLazyRow(
            contentPadding = PaddingValues(10.dp),
            horizontalArrangement = Arrangement.spacedBy(20.dp)
        ) {
            items(5) {
                TextButton(
                    {},
                    modifier = Modifier
                        .semantics {
                            isTraversalGroup = true
                            traversalIndex = 1f
                        }
                ) {
                    Text("Item $it")
                }
                for (i in 1 until 5) {
                    TextButton(
                        {},
                        modifier = Modifier
                            .semantics {
                                isTraversalGroup = true
                                traversalIndex = (i + 1).toFloat()
                            }
                    ) {
                        Text("Item $i")
                    }
                }
            }
        }
    }
}

结论

通过应用这些修改,可以确保正确的遍历顺序,从而提高 Android TV 应用的可访问性。

常见问题解答

  • 为什么需要使用 isTraversalGroup 语义?

isTraversalGroup 语义将一个控件指定为遍历组,确保屏幕阅读器将它作为单个单元进行遍历。

  • 为什么要使用浮点数作为 traversalIndex

浮点数允许以小数点精度指定遍历索引,从而确保与列表中项目的顺序精确匹配。

  • 我可以将多个控件添加到同一个遍历组吗?

可以,但需要注意,遍历顺序将是按照控件在遍历组中添加的顺序进行。

  • 如何测试遍历顺序?

可以使用 Android TV 仿真器或物理 Android TV 设备来测试遍历顺序。启用无障碍功能并使用屏幕阅读器来验证控件是否按预期进行遍历。

  • 还有其他方法可以改善 Android TV 的无障碍性吗?

除了使用正确的遍历顺序外,还可以通过使用性文本、提供替代文本以及确保控件对不同输入设备(如 D-pad 和远程控制)做出反应来提高无障碍性。