安卓等待UI线程

3
为了测试目的,我需要获取屏幕上所有可见视图的坐标。然而,在检查输出时,似乎UI线程还没有完成绘制/定位/应用所有视图的设置。一些视图是0x0像素,而它们应该是(在模拟器和物理设备上)可见的。一些底部对齐的按钮被定位成楼梯形等等。
问:我应该如何等待UI线程完成绘制(或者至少等待一秒钟,这应该足够),以便所有可见视图的坐标准确无误?
我怀疑与线程有关,但我找不到任何明确的答案。目前为止,我没有任何自声明的线程。
编辑:我使用onBackPressed使一堆视图可见,然后在xml中捕获它,使之前的视图不可见,并使其他视图可见,在xml中捕获它,等等。我遍历几个不同的视图组合,并“xml-screenshot”每个组合。

也许将可运行的内容发布到UI线程在这里也可以起作用:https://dev59.com/tGw15IYBdhLWcg3wJ4YR#9425410 - zapl
1个回答

6
LinearLayout layout = (LinearLayout)findViewById(R.id.YOUD VIEW ID);
ViewTreeObserver vto = layout.getViewTreeObserver(); 
vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() { 
    @Override 
    public void onGlobalLayout() { 
        this.layout.getViewTreeObserver().removeGlobalOnLayoutListener(this); 
        int width  = layout.getMeasuredWidth();
        int height = layout.getMeasuredHeight(); 

    } 
});

你需要调整这个以适应你的布局,并在基本父布局中添加一个ID。
通过使用ViewTreeObserver,你可以知道你的布局何时完成绘制,并在那时运行所需的代码。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接