gpt4 book ai didi

android - 使用 AccessibilityService 中的 AccessibilityNodeInfo 执行滚动

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

我想滚动当前屏幕。我试过这个
AccessibilityNodeInfo accessibilityNodeInfo=getRootInActiveWindow();
accessibilityNodeInfo.addAction(AccessibilityNodeInfo.AccessibilityAction.ACTION_SCROLL_DOWN);
但我总是说“无法在密封实例上执行此操作”。请帮忙。

最佳答案

首先:您尝试做的事情存在问题。

当你看到这个

Cannot perform this action on a sealed instance.

此消息是 Android 告诉您您拥有的信息已设置。能够说出一个不可滚动的 View 对您来说有意义吗?不。您不能强制 View 可滚动。可滚动的 View 取决于 View 。例如,可滚动的 Button 是没有意义的!无障碍服务无法强制执行此行为。

应用程序的根节点很可能是某种类型的框架布局,并且永远无法滚动。层次结构的可滚动部分几乎总是主布局/ Root View 的 subview 。这个故事的寓意是,您不能说一个 View 是可滚动的,您必须找到一个可滚动的 View 。

话虽如此,我将为您提供一个更好的解决方案,希望它在您支持的设备范围内。

@TargetApi(Build.VERSION_CODES.M)
public boolean scrollTo(AccessibilityNodeInfo nodeInfo) {

return nodeInfo.performAction(AccessibilityNodeInfo.AccessibilityAction.ACTION_SHOW_ON_SCREEN.getId());

}

如果您需要支持 Android M 之前的版本,您需要做的是探索布局中 View 的 AccessibilityNodeInfo 层次结构,如果这是真的,这看起来大概像这样(未测试,但应该非常接近! ):

public boolean scrollView(AccessibilityNodeInfo nodeInfo) {

if (nodeInfo == null) return false;

if (nodeInfo.isScrollable()) {
return nodeInfo.performAction(AccessibilityNodeInfo.ACTION_SCROLL_FORWARD);
}

for (int i = 0; i < nodeInfo.getChildCount(); i++) {
if (scrollView(nodeInfo.getChild(i)) {
return true;
}
}

return false;
}

关于android - 使用 AccessibilityService 中的 AccessibilityNodeInfo 执行滚动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44566402/

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