我想滚动当前屏幕。
我试过这个
AccessibilityNodeInfo accessibilityNodeInfo=getRootInActiveWindow();
accessibilityNodeInfo.addAction(AccessibilityNodeInfo.AccessibilityAction.ACTION_SCROLL_DOWN);
但我总是说“不能在密封的实例上执行此操作”。
求助。
答案 0 :(得分:1)
第一:你正在尝试做的事情的问题。
当你看到这个
无法在密封的实例上执行此操作。
此消息是Android告诉您已设置的信息。你能告诉一个不可滚动的视图是否有意义?没有。您无法强制视图可滚动。可滚动的视图取决于视图。例如,一个可滚动的Button没有任何意义!辅助功能服务无法强制执行此操作。
应用程序的根节点很可能是某种类型的框架布局,并且永远不可滚动。层次结构的可滚动部分几乎总是主布局/根视图的子级。故事的道德,你不能告诉视图是可滚动的,你必须找到一个可滚动的视图。
话虽如此,我将为您提供更好的解决方案,希望它在您支持的设备范围内。
@TargetApi(Build.VERSION_CODES.M)
public boolean scrollTo(AccessibilityNodeInfo nodeInfo) {
return nodeInfo.performAction(AccessibilityNodeInfo.AccessibilityAction.ACTION_SHOW_ON_SCREEN.getId());
}
如果你需要支持Android M的版本,你需要做的是探索布局中的视图的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;
}