Android:如何强制 Explore-By-Touch/Talkback 在辅助功能焦点中重复当前视图的内容描述?

2023-11-28

在我的 Android 应用程序中,我有一个View它显示图像并具有关联的ContentDescription.

我可以启用设置->辅助功能->对讲, with 触摸探索从“对讲”设置中,然后单击“视图”以阅读ContentDescription aloud.

到目前为止,这一切都符合预期。

不过,我想触摸探索重复ContentDescription如果我单击相同的View再次。例如,我的图像和描述可能会更新,但它具有AccessibilityFocus,因此说出新短语会对用户有所帮助。我怎样才能实现这个目标?

我尝试过尝试View.clearFocus() and View.invalidate(),但没有成功。

任何有建设性的想法都将受到欢迎。

Update

我还应该提到,我想从 API 8 开始添加支持。因此,我尝试尽我所能使用 API 4 的辅助功能接口。

我目前正在研究一个使用的解决方案View.clearFocus()其次是View.requestFocus()解决更新视图问题。到目前为止,这似乎在我的 API 8 和 16 测试套件上有效。

我将再次更新最终结果,但欢迎在此期间提出进一步的建议。


正如我在问题中所承诺的,这是我的调查结果和可行的解决方案。

首先,非常感谢 alanv 的帮助和支持,以及回答后续 API(14 及以上)的问题。尽管他没有找到旧 API 的解决方案,但他确实提供了帮助我找到答案的关键信息。

在撰写本文时,还不可能构建一个成功的口语AccessibilityEvent,由于 TalkBack 中的一个已知错误 - 请参阅发送未链接到视图的辅助功能事件了解更多详情。如果事件源为 null,则 TalkBack (v3.5.0_r105) 会忽略该事件并作为AccessibilityEvent.setSource(View)首次出现于API 14,不可能在此之前设置源 - 请参阅Google Eyes-Free 问题 #379

不过安卓还是可以的generate此类事件通过使用View.requestFocus()正如我之前暗示的那样。

  1. 使您的视图可聚焦于其XML布局 using:

    android:focusable="true"
    android:focusableInTouchMode="true"

  2. 使用设置语音文本View.setContentDescription(text) in Activity.onCreate或与android:contentDescription="text"如果是静态的,则在 XML 布局中;如果需要,则在代码中动态地进行。

  3. 当需要语音文本时,使用以下命令将焦点移至正确的视图View.requestFocus()触发一个AccessibilityEvent.

  4. 为了确保重复某个短语(我原来的问题),请致电View.clearFocus()在上一步中请求焦点之前。

我已经在 API 8 上测试了此方法的实现,它也适用于 API 16。它应该一直工作到 API 4,当辅助功能 API首次被介绍。

对于只支持较新的 Android API(14 及更高版本)的开发人员来说,可能不需要此解决方案,但我相信目前对于那些支持早期 API 中的辅助功能的开发人员来说,几乎没有其他选择。祝你好运。

Update

不幸的是,alanv 的答案似乎已经消失 - 可能被删除 - 连同评论中所有相关的细节和讨论。我试图重新捕捉以下要点。

  1. 对于 Android API 14 及更高版本,可以按如下方式创建焦点事件:

    if (mAccessibilityService.isEnabled()) { AccessibilityEvent event = AccessibilityEvent.obtain( AccessibilityEvent.TYPE_VIEW_FOCUSED); event.setSource(myView); // API 14 & later event.setClassName(myView.getClass().getName()); event.setPackageName(myView.getContext().getPackageName()); event.setEnabled(true); event.setContentDescription(text); myView.sendAccessibilityEventUnchecked(event); }

  2. 对于 Android API 16 及更高版本,View.announceForAccessibility(text)可以使用。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android:如何强制 Explore-By-Touch/Talkback 在辅助功能焦点中重复当前视图的内容描述? 的相关文章