出于测试目的,我需要获取屏幕上所有可见 View 的坐标。但是,在检查输出时,似乎 UI 线程尚未完成对所有 View 的绘制/定位/应用设置。有些 View 是 0x0 像素,但它们应该(并且它们在模拟器和物理设备上)可见。一些底部对齐按钮的位置类似于楼梯等。
问:如何等待 UI Thread 完成绘制(或至少等待一秒钟,这应该足够了),以便所有可见 View 的坐标准确?
我怀疑是 Threads 的问题,但我找不到任何明确的答案。到目前为止,我还没有任何自己声明的线程。
编辑:我使用 onBackPressed 使一堆 View 可见,然后在 xml 中捕获它,使以前的 View 不可见而其他 View 可见,在 xml 中捕获它,等等。我迭代了几个不同的 View 组合和“xml-screenshot”每个组合。
最佳答案
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 ,你可以知道你的布局何时完成绘制,然后运行你需要的代码
关于java - Android 等待 UI 线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12598973/