如何知道活动何时完成布局传递?

Cha*_*ayy 23 android android-layout android-activity

我有一个后台线程来更新我的活动的UI,之后onCreate().它可以添加布局,也可以更改其他布局.

我只是想检测布局传递何时在我的活动中完成,以便能够手动更新其他视图的位置,这些视图直接取决于刚刚加入或修改的布局.

现在,我只是用Handler一个postDelayed runnable触发的modifs后,没有工作,一个小的延迟之后,围绕50-100毫秒requestLayout().

它有效,但我们可以看到延迟.我想尽快完成这项工作.在视图代码中,检测测量过程很简单,但我没有找到如何在活动中直接解决这个问题.

Phi*_*ons 44

GlobalLayoutListener将在完成布局时触发事件.这会满足你的需求吗?

View myView=findViewById(R.id.myView);
  myView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
            @Override
            public void onGlobalLayout() {
                //At this point the layout is complete and the 
                //dimensions of myView and any child views are known.
            }
        });
Run Code Online (Sandbox Code Playgroud)

  • 我刚刚运行了一个测试,它似乎在初始布局中至少调用了 3 次 `onGlobalLayout`。 (3认同)