如何解决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 举报,一经查实,本站将立刻删除。