在我的Android应用中,我有一个显示图片的View
,并且已关联ContentDescription
。
我可以通过对讲设置启用设置 - >辅助功能 - >对讲,通过触摸浏览,然后点按视图即可阅读{ {1}}大声。
到目前为止,这一切都符合预期。
但是,如果我再次点击相同的ContentDescription
,我希望触摸浏览重复ContentDescription
。例如,我的图片和说明可能会在View
时更新,因此说新短语会对用户有所帮助。我怎样才能做到这一点?
我尝试过AccessibilityFocus
和View.clearFocus()
,但没有成功。
欢迎任何有建设性的想法。
更新
我还应该提到我想从API 8开始添加支持。因此,我正在尝试使用API 4的Accessibility接口尽力而为。
我目前正在开发一种解决方案,该解决方案使用View.invalidate()
后跟View.clearFocus()
来解决更新后的问题。到目前为止,这似乎在我的测试工具包中使用API 8和16。
我将再次更新最终结果,但欢迎在此期间提供进一步的建议。
答案 0 :(得分:8)
正如我的问题所承诺的,以下是我的调查结果和工作解决方案。
首先,非常感谢alanv的帮助和支持,以及回答以后API(14及以上)的问题。虽然他没有找到旧API的解决方案,但他确实提供了帮助我找到答案的重要信息。
在撰写本文时,由于TalkBack中的已知错误,无法构建成功说出的AccessibilityEvent
- 有关详细信息,请参阅Send accessibility event not linked to view。如果事件源为null,则TalkBack(v3.5.0_r105)将忽略该事件,并且AccessibilityEvent.setSource(View)
首次出现View.requestFocus()
,因此无法在此之前设置源 - 请参阅{{ 3}}
但是,正如我之前所暗示的那样,可以使用android:focusable="true"
来制作Android 生成此类事件。
使用以下内容{/ 3}}使您的视图可关注:
android:focusableInTouchMode="true"
View.setContentDescription(text)
使用Activity.onCreate
中的android:contentDescription="text"
或XML布局中的View.requestFocus()
设置语音文本(如果它是静态的),或者在必要时动态使用代码。
当需要语音文字时,使用AccessibilityEvent
将焦点移至正确的视图以触发View.clearFocus()
。
要确保重复短语(我的原始问题),请在上一步请求重点之前致电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);
}
。
我已经在API 8上使用了这种方法的经过测试的实现,它也适用于API 16.当API 14首次引入时,它应该可以一直回到API 4。
对于仅支持更新的Android API(14及更高版本)的开发人员,可能不需要此解决方案,但我相信目前支持早期API中的辅助功能的其他选项很少。祝你好运。
<强>更新强>
不幸的是,阿兰夫的答案似乎已经消失 - 可能已删除 - 在评论中考虑了所有相关细节和讨论。我试图重新获得以下要点。
对于Android API 14及更高版本,可以按如下方式创建重点事件:
View.announceForAccessibility(text)
对于Android API 16及更高版本,可以使用{{1}}。