对于多个类类型,这种情况在多个地方发生,但我现在将继续使用一个按钮示例。
所以我有一个按钮,我想反馈宣布为“播放”。内容描述设置为“播放”。不过,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试图通过角色描述为用户提供一致且高质量的体验。在绝大多数情况下,您不应该试图重写此行为。

09-08 02:00