对于多个类类型,这种情况在多个地方发生,但我现在将继续使用一个按钮示例。
所以我有一个按钮,我想反馈宣布为“播放”。内容描述设置为“播放”。不过,Talkback也在宣布课程,所以它读作“播放按钮”。
我试图通过重载oninitializeAccessibilityNodeinfo方法找到一个解决方案
private void setupContentDescriptors() {
mPlayPauseButton.setAccessibilityDelegate(new View.AccessibilityDelegate() {
public void onInitializeAccessibilityNodeInfo(View host, AccessibilityNodeInfo info)
{
super.onInitializeAccessibilityNodeInfo(host, info);
//blanked to prevent talkback from announcing class/type
info.setClassName("");
info.setContentDescription("Play");
}
});
}
将类名设置为“”非常有效,但我很快发现此解决方案仅适用于API23及更高版本。
根据这些文档,“从API23开始,委托方法在宿主方法之后调用,宿主方法在不被宿主类覆盖的情况下修改所有属性。”
我试过其他几种方法都没有用。
思想?
最佳答案
在api 23之前,如果需要重写类名,则需要创建一个子类并实现onInitializeAccessibilityNodeInfo()
。不能使用委托覆盖它。
也就是说,Talkback试图通过角色描述为用户提供一致且高质量的体验。在绝大多数情况下,您不应该试图重写此行为。