java - Android 等待 UI 线程

标签 java android multithreading

出于测试目的,我需要获取屏幕上所有可见 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/

相关文章:

java - 如何在 FXML 中使用预定义的 Spinner 样式类

java - 在无连接服务器中获取远程IP地址

android - 数组长度错误,通知管理器导致 4.4 手机崩溃

java - 如何在 Android 上检查我的应用程序堆内存大小?

android - 动态计算使用 StaggeredGridLayoutManager 填充的 RecyclerView 的大小

java - 有什么好的示例程序可以演示对 Thread.sleep() 抛出的 InterruptedException 的不当处理?

c++ - Meyers 的 Singleton 模式线程安全实现吗?

java - 为在线多人游戏构建服务器

java - jdk8 中的 HashMap 调整大小

java - 如何允许用户将字符串输入到数组中,直到他们在没有文本输入的情况下按回车键?