5

当 ImageView 通过可访问性获得焦点时,我正在尝试更改 TalkBack 宣布的文本。

Android 文档指出我们应该创建一个 AccessibilityDelegate,并覆盖 onPopulateAccessibilityEvent(我正在使用支持库,因为我也支持 GingerBread)

因此,我的代码如下:

public static void setImageDelegate(View view) {
    AccessibilityDelegateCompat delegate = new AccessibilityDelegateCompat() {
        @Override
        public void onPopulateAccessibilityEvent(View host, AccessibilityEvent event) {
            event.getText().add(event.getContentDescription() + ", image");
        }
    };
    ViewCompat.setAccessibilityDelegate(view, delegate);
}

当我在 imageview 上调用此函数时,已设置委托,但未读取修改后的文本。它只是读取原始内容描述。我是否做错了什么或遗漏了辅助功能?

单步执行代码,似乎添加了正确的文本,但语音文本仍然没有变化。

注意:上面是一个人为的例子,可以使用内容描述,但我想弄清楚为什么它在自定义视图上尝试之前不起作用。

4

1 回答 1

7

在 ICS 及更高版本中,TalkBack 在大多数情况下不使用辅助功能事件文本。相反,它检查视图公开的 AccessibilityNodeInfo 的文本和内容描述。您需要覆盖 onInitializeAccessibilityNodeInfo。

但是,在大多数情况下,您只想调用 View.setContentDescription。

在这种特殊情况下,您不应设置任何内容,因为 TalkBack 处理语音控制类型和功能。我们强烈建议开发人员不要添加“按钮”或“图像”等描述。

于 2014-09-22T22:47:10.263 回答