gpt4 book ai didi

java - 如何从 AccessibilityDelegate 的 AccessibilityNodeInfo 中的 View 中提取文本?

转载 作者:行者123 更新时间:2023-12-01 09:45:09 25 4
gpt4 key购买 nike

我试图让 TalkBack 说出 host View 内的文本内容,然后加上“很酷”。

为此,我在线性布局上设置辅助功能委托(delegate),但 info 参数的 text 和 contentDescription 属性始终为 null。即 info.getText()info.getContentDescription() 始终返回 null。我似乎无法从嵌套的 TextView 中提取文本。

因此,host 参数是一个线性布局,其中包含另一个嵌套的线性布局。此嵌套线性布局又包含更多嵌套布局和 TextView 作为其子级。 (我的目标是 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 都在那里,及其各自的文本字段。问题是,我似乎无法从中提取文本。

如有任何帮助,我们将不胜感激。

最佳答案

看来您必须迭代子级。

您可以使用 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());

关于java - 如何从 AccessibilityDelegate 的 AccessibilityNodeInfo 中的 View 中提取文本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38109646/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com