关于Android无障碍Talkback,是否存在Talkback焦点侦听器?

3
我正在为视力受损的人开发Android照片应用程序。
当然,我的应用程序在Talkback上下文中运行。 在Talkback上下文中,当按钮被聚焦时,系统会读取按钮的文本。 绿色框表示聚焦的内容 我想要做的是在按钮被聚焦时播放音频文件而不是按钮的文本标签。 然而,我找不到任何检测按钮聚焦状态的监听器。 有什么方法可以做到这一点吗?
1个回答

4
免责声明:焦点上发生的事情可能是一个重大的无障碍违规行为,根据WCAG 2.0 - 3.2.1。我建议您重新考虑您的设计/进行广泛的用户研究,以确保您最终所做的不仅仅是创建令人沮丧的用户体验。不仅如此,还要记住TalkBack不是唯一的辅助技术,这种机制可能对使用Switch Access的用户非常令人沮丧,并且对于BrailleBack用户可能完全失效。
话虽如此,以下是如何实现此行为的方法:
您需要查看View.AccessibilityDelegate中可用的回调函数。
我认为您应该寻找类似以下代码的代码:
void onPopulateAccessibilityEvent(View host, AccessibilityEvent event) {
    if (event.getEventType() == AccessibilityEvent.TYPE_VIEW_ACCESSIBILITY_FOCUSED) {
        //do stuff here
    }
}

将此附加到接收焦点的视图上,或者根据您使用的回调方式,您可以将其附加到包含一系列控件的布局上。现在,我说“类似于这样”的原因是有很多不同的可访问性委托回调,事件触发前,事件触发后,允许您在填充视图层次结构时微调事件的事物等。您选择哪个回调取决于您想在什么时候发生以及需要微调的AccessibilityEvent的性质。

实际上,我不明白如何将这段代码应用到我的项目中。 你的意思是我需要将这段代码附加到我的活动类吗? 那么我怎么知道哪个按钮被点击了呢?简单来说,我想做的是: 当按钮1聚焦时 -> 播放A.mp3文件 当按钮2聚焦时 -> 播放B.mp3文件 (有完整的代码示例吗?) - Hanseul Cho
在之前的评论中,"clicked" 应该翻译为 "focused"。 - Hanseul Cho
谢谢,我做到了。我将可访问性委托设置给了按钮! - Hanseul Cho
你应该接受这个答案!保持事情的整洁和清晰。 - MobA11y
我有一个项目列表,每个项目都有一个计数器。由于我不想在每个项目中使用 setLiveRegion 方法,所以我想将其设置在当前选定的项目中,这样用户就可以得知每 ~30 秒发生的计数器变化。我认为这是一个有效的用例,你觉得呢? - David
显示剩余2条评论

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