我可以通过Talkback设置启用“设置” – >“辅助功能” – >“对讲”,“触摸浏览”,然后单击“查看”以大声读取ContentDescription.
到目前为止,这一切都符合预期.
但是,如果我再次点击同一个视图,我希望Explore By Touch重复ContentDescription.例如,我的图像和描述可能会在具有AccessibilityFocus时更新,因此说新短语对用户有帮助.我怎样才能做到这一点?
我尝试过使用View.clearFocus()和View.invalidate(),但没有成功.
任何建设性的想法都会受到欢迎.
更新
我还应该提到我想从API 8开始添加支持.因此,我正在尝试使用API 4的Accessibility接口尽力而为.
我目前正在开发一个使用View.clearFocus()后跟View.requestFocus()来解决更新视图问题的解决方案.到目前为止,这似乎在我的测试工具包上使用API 8和16.
我将再次更新最终结果,但欢迎在此期间提出进一步的建议.
解决方法
首先,非常感谢alanv的帮助和支持,以及回答以后API(14及以上)的问题.虽然他没有找到旧API的解决方案,但他确实提供了帮助我找到答案的关键信息.
在撰写本文时,由于TalkBack中的已知错误,无法构建成功说出的AccessibilityEvent – 有关详细信息,请参阅Send accessibility event not linked to view.如果事件源为null,则事件被TalkBack(v3.5.0_r105)忽略,并且由于AccessibilityEvent.setSource(View)首次出现在API 14中,因此无法在此之前设置源 – 请参阅Google Eyes-Free issue #379
但是,正如我之前所暗示的,可以通过使用View.requestFocus()使Android生成此类事件.
>使用以下功能使您的View在XML layout中具有焦点:
机器人:可聚焦=“真”
机器人:focusableInTouchMode = “真”
>使用Activity.onCreate中的View.setContentDescription(text)或XML布局中的android:contentDescription =“text”设置语音文本(如果它是静态的),或者在必要时动态地在代码中设置.
>当需要语音文本时,使用View.requestFocus()将焦点移动到正确的视图以触发AccessibilityEvent.
>要确保重复短语(我的原始问题),请在上一步骤中请求焦点之前调用View.clearFocus().
我在API 8上有一个经过测试的这种方法的实现,它也适用于API 16.它应该一直工作到API 4,当Accessibility API首次推出时.
仅支持更新的Android API(14及更高版本)的开发人员可能不需要此解决方案,但我相信目前支持早期API中的辅助功能的其他选项很少.祝好运.
更新
不幸的是,阿兰夫的答案似乎已经消失 – 可能已删除 – 在评论中考虑了所有相关的细节和讨论.我试图重新获得以下要点.
>对于Android API 14及更高版本,可以按如下方式创建焦点事件:
if(mAccessibilityService.isEnabled()){AccessibilityEvent事件= AccessibilityEvent.obtain(AccessibilityEvent.TYPE_VIEW_FOCUSED);event.setSource(MyView的); // API 14&后来event.setClassName(myView.getClass()的getName());event.setPackageName(myView.getContext()getPackageName());event.setEnabled(真);event.setContentDescription(文本);myView.sendAccessibilityEventUnchecked(事件);}>对于Android API 16及更高版本,可以使用View.announceForAccessibility(文本).