首页 > 其他分享 >accessservice对于难定位的view如何定位

accessservice对于难定位的view如何定位

时间:2023-01-19 01:22:36浏览次数:30  
标签:info 定位 int accessservice ints sb tabcount append view

    private static int tabcount = -1;
    private static StringBuilder sb;
 
    public static void printPacketInfo(AccessibilityNodeInfo root) {
        sb = new StringBuilder();
        tabcount = 0;
        int[] is = {};
        analysisPacketInfo(root, is);
        JLog.d(sb.toString());
    }
 
    //打印此时的界面状况,便于分析
    private static void analysisPacketInfo(AccessibilityNodeInfo info, int... ints) {
        if (info == null) {
            return;
        }
        if (tabcount > 0) {
            for (int i = 0; i < tabcount; i++) {
                sb.append("\t\t");
            }
        }
        if (ints != null && ints.length > 0) {
            StringBuilder s = new StringBuilder();
            for (int j = 0; j < ints.length; j++) {
                s.append(ints[j]).append(".");
            }
            sb.append(s).append(" ");
        }
        String name = info.getClassName().toString();
        String[] split = name.split("\\.");
        name = split[split.length - 1];
        if ("TextView".equals(name)) {
            CharSequence text = info.getText();
            sb.append("text:").append(text);
        } else if ("Button".equals(name)) {
            CharSequence text = info.getText();
            sb.append("Button:").append(text);
        } else {
            sb.append(name);
        }
        sb.append("\n");
 
        int count = info.getChildCount();
        if (count > 0) {
            tabcount++;
            int len = ints.length + 1;
            int[] newInts = Arrays.copyOf(ints, len);
 
            for (int i = 0; i < count; i++) {
                newInts[len - 1] = i;
                analysisPacketInfo(info.getChild(i), newInts);
            }
            tabcount--;
        }
 
    }

  该方法打印的节点树如下: 

这样我们可以通过前面的0.0.0.1.1直接定位到View

        AccessibilityNodeInfo info = root;
 
        int[] path = {0, 0, 0, 1, 1};
        for (int i = 0; i < path.length; i++) {
            info = info.getChild(path[i]);
            if (info == null || info.getChildCount() <= 0) {
                return null;
            }
        }
        return info;

  当然你有可能不知道0.0.0.1.1对应哪一个视图,可以通过

        Rect rect = new Rect();
        info.getBoundsInScreen(rect);
        //状态栏的高度
        int h = GUtil.getStatusBarHeight(context.getApplicationContext());
        rect.top -= h;
        rect.bottom -= h;

  

标签:info,定位,int,accessservice,ints,sb,tabcount,append,view
From: https://www.cnblogs.com/itshijieku/p/17060966.html

相关文章