微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Talkback 在 Android TV 上的标题之前首先宣布聚焦按钮的标签

如何解决Talkback 在 Android TV 上的标题之前首先宣布聚焦按钮的标签

我正在为 Android TV 实现一个屏幕,它在左侧有一个屏幕标题一个按钮。以及垂直排列的自定义视图/行(可选择/可点击)列表,位于页面右侧。

用户看到那个屏幕时,我们希望左边的按钮成为焦点。为此,我在片段的 button.requestFocus()调用 onResume()

这破坏了可访问性。当启用对讲时,首先宣布的是按钮的标签。我想要的是先宣布标题,然后是按钮的标签

我试图通过

宣布自定义文本(可能是标题

rootView.announceForAccessibility(accessibilityText)

其中 rootView 是 xml 布局的根,accessibilityText 是需要宣布的文本。

但这无济于事,按钮的标签获得优先权。

我该如何解决这个问题?

解决方法

我会请你考虑WCAG Guideline 3.2.1:

此成功标准的目的是确保在访问者浏览文档时功能是可预测的。任何能够在接收焦点时触发事件的组件都不得更改上下文。当组件获得焦点时更改上下文的示例包括但不限于:

  • 组件获得焦点时自动提交的表单;
  • 组件获得焦点时启动的新窗口;
  • 焦点在该组件获得焦点时更改为另一个组件;

还有来自 Android Accessibility Team 的引用:

因此,人们喜欢做的类似事情是自己管理可访问性焦点。再说一次,这是一个坏主意。无障碍焦点必须由无障碍服务确定,就像公告一样,这会导致体验不一致。实际上,这是无障碍用户面临的最大问题之一,即跨应用程序和时间的不一致。

话虽如此,您可能需要考虑使用以下属性确保组件的 focus order / priority

android:nextFocusUp
android:nextFocusDown
android:nextFocusLeft
android:nextFocusRight

还要确保任何可能突出显示的组组件都设置了 importantForAccessibility 属性。

我想尝试提供更多帮助,但如果没有示例 XML 文件,则很难了解您的特定用例。您是否尝试过与无障碍用户一起测试视图布局?

,

我从 ATAUL MUNIM 的 this 文章中得到了提示。在明确请求焦点之前,我添加了一个检查是否启用了对讲。

 protected fun isTalkBackEnabled(): Boolean {
    val a11yServices = context?.getSystemService(ACCESSIBILITY_SERVICE) as? AccessibilityManager
    return a11yServices?.isTouchExplorationEnabled?:false
}

if(isTalkBackEnabled().not()) {
   button.requestFocus()
}

这个解决方案几乎让我摆脱了我面临的问题。这也是我前进的唯一途径,因为我的应用程序的最低 API 级别是 21,这消除了使用 android:screenReaderFocusable

的选项

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。