我想知道是否存在一种使用辅助功能一次打开/关闭众多开关的好方法。
所以基本上我有一个视图,其中包含一个RecyclerView,其中包含约40个开关,我需要一种方法来尽可能快地打开/关闭它们。这是我尝试过的。
public static void scrollView(final AccessibilityNodeInfo nodeInfo) {
if (nodeInfo == null) return;
if (nodeInfo.isScrollable()) {
if (nodeInfo.performAction(AccessibilityNodeInfo.ACTION_SCROLL_FORWARD)) {
final Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
turnOffSwitches(nodeInfo);
}
}, 1000);
}
}
}
public static void turnOffSwitches(final AccessibilityNodeInfo parentView) {
if (parentView.getClassName().equals("android.support.v7.widget.RecyclerView")) {
for (int i = 0; i < parentView.getChildCount(); i++) {
final AccessibilityNodeInfo child = parentView.getChild(i);
final Boolean isLasteOne = (i == parentView.getChildCount() - 1);
child.performAction(AccessibilityNodeInfo.ACTION_CLICK);
if (isLasteOne) {
scrollView(parentView);
}
}
}
}
我什至尝试在ACTION_CLICK动作之间引入延迟,这虽然有所帮助,但不能完全解决我的问题。因此,我遇到的问题是并非所有开关都会关闭。看来此操作的完成速度是有限的。所以我的问题是,是否有更好的方法可以做到这一点?
ACTION_SCROLL_FORWARD-这不是分页,只是滚动整个元素矩阵的一部分,并且某些可见元素已经切换到状态,因此在您的下一个循环中,您尝试单击已被剪切的元素(下一个可见区域与上一个重叠) )
要么检查状态的开/关-如果在更改视图之前视图尚未处于所需的状态
或检查event.getScrollX()和event.getScrollY(),如果尚未在这些范围内执行操作