我正在尝试更改当通过辅助功能关注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上调用此函数时,委托被设置,但未读取修改后的文本。它只是读取原始内容描述。我做错了什么或遗漏了关于辅助功能的事情吗?
单步执行代码,似乎正在添加正确的文本,但仍然没有更改语音文本。
注意:上面是一个人为的例子,可以使用内容描述,但我试图弄清楚为什么在我尝试自定义视图之前它没有用。
答案 0 :(得分:6)
在ICS及以上版本中,在大多数情况下,TalkBack不使用辅助功能事件文本。相反,它会检查视图公开的AccessibilityNodeInfo的文本和内容描述。您需要覆盖onInitializeAccessibilityNodeInfo。
但在大多数情况下,您只想调用View.setContentDescription。
在这种特殊情况下,由于TalkBack处理语音控制类型和功能,因此不应设置任何内容。我们强烈建议开发人员不要添加“按钮”或“图像”等描述。