Android等待UI线程

时间:2012-09-26 09:48:02

标签: java android multithreading

出于测试目的,我需要在屏幕上获取所有可见视图的坐标。但是,在检查输出时,似乎UI线程尚未完成绘制/定位/应用设置到所有视图。一些视图是0x0像素,而它们应该是(并且它们在仿真器和物理设备上)可见。一些底部对齐的按钮位于楼梯等处。

问:我如何等待UI线程完成绘图(或者至少等待一秒钟,这应该绰绰有余),所以所有可见视图的坐标都是准确的?

我怀疑它与Threads有关,但我找不到任何确定的答案。到目前为止,我没有任何自我声明的线程。

编辑:我使用onBackPressed使一堆视图可见,然后在xml中捕获它,使先前的视图不可见,其他视图可见,在xml中捕获,等等。我通过几个不同的视图组合迭代,并且“ xml-screenshot“每个组合。

1 个答案:

答案 0 :(得分: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,您可以了解布局何时完成绘制,然后运行所需的代码