我正在尝试让TalkBack说出host
视图中的文字内容,以及"很酷"然后。
为此,我在线性布局上设置了辅助功能委托,但info
参数的text和contentDescription属性始终为null。即info.getText()
和info.getContentDescription()
始终返回null。我似乎无法从嵌套的TextViews中提取文本。
host
参数因此是线性布局,其中包含另一个嵌套的线性布局。这种嵌套的线性布局反过来包含更多嵌套布局和文本视图作为其子项。 (我的目标是API 21 +)
linearLayout.setAccessibilityDelegate(new View.AccessibilityDelegate()
{
@Override
public void onInitializeAccessibilityNodeInfo(View host, AccessibilityNodeInfo info)
{
super.onInitializeAccessibilityNodeInfo(host, info);
String newWordsToSay = info.getText() + " is cool"
//info.getText() CRASHES due to null pointer exception
info.setContentDescription(info.setText(newWordsToSay));
}
});
编辑:在检查host
参数时,所有预期的嵌套TextView都在那里,并带有各自的文本字段。问题是,我似乎无法从中提取文本。
任何帮助都将不胜感激。
答案 0 :(得分:1)
看起来你必须遍历孩子们。
您可以使用View::addChildrenForAccessibility(ArrayList<View> list)
方法收集与辅助功能相关的子项,它会填充传递的list
。然后你可以连接他们的文本:
super.onInitializeAccessibilityNodeInfo(host, info);
ArrayList<View> childrenViews = new ArrayList<>();
host.addChildrenForAccessibility(childrenViews);
StringBuilder text = new StringBuilder();
for (View view : childrenViews) {
if (view instanceof TextView) {
text.append(((TextView)view).getText());
}
}
text.append(" is awesome");
info.setContentDescription(text.toString());