Android - Talkback在内容描述结束时宣布类类型。

时间:2016-06-15 19:12:33

标签: java android user-interface accessibility talkback

这种情况发生在多个班级类型的几个地方,但我现在坚持使用按钮示例。

所以我有一个按钮,我希望对话宣布为" Play"。内容描述设置为" Play"。但是,对讲也是在宣布课程,所以它的内容是"播放按钮"。

我通过重载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");
        }
    });
}

将班级名称设置为""工作得很好,但我很快发现这个解决方案只适用于API 23及更高版本。 根据文档,"从API 23开始,委托方法在宿主方法之后调用,所有属性都要被修改而不被宿主类覆盖。"

我尝试了其他几种方法无济于事。 想法?

3 个答案:

答案 0 :(得分:3)

在API 23之前,如果需要覆盖类名,则需要创建子类并实现onInitializeAccessibilityNodeInfo()。您无法使用委托来覆盖它。

也就是说,TalkBack正试图通过说出角色描述为您的用户提供一致和高质量的体验。在绝大多数情况下,您不应尝试覆盖此行为。

答案 1 :(得分:0)

如果你有一个小而着名的用户圈子,也许这是alanv答案的另一种选择。

在Talkback 5.2.1(*)中你可以这样做:

在"设置 - >下辅助功能 - >对讲 - >设置 - >冗长

您可以在此处打开/关闭条目"说出元素类型"

有了这个,用户自己可以决定他是否想要听到元素类型。这是另一个论点,不是修改Talkback读取元素的方式。

(*)我没有找到任何关于何时引入说话元素的详细设置的文档。在我的Android设备上使用Talkback 5.2.1它可以正常工作,而使用Talkback 5.0.3的设备则没有这个设置。所以介于两者之间的任何地方都必须引入。

答案 2 :(得分:0)

您尝试过

ViewCompat.setAccessibilityDelegate(mPlayPauseButton, new 
AccessibilityDelegateCompat() {
    @Override
   public void onInitializeAccessibilityNodeInfo(View host, 
       AccessibilityNodeInfoCompat info) {
       super.onInitializeAccessibilityNodeInfo(host, info);
       info.setClassName(null);
       info.setContentDescription("your label");
   }
})

ViewCompat应该注意版本处理。