如何知道布局过程是否完成?

时间:2017-03-09 11:24:37

标签: android android-layout view

我需要在我的客户视图中调用requestLayout(),但我注意到了

  

当视图层次结构当前处于布局传递中时,不应调用此方法({@link#isInLayout()}。

所以我决定使用这段代码:

if(isInLayout()) {
    // request layout later
} else {
    requestLayout();
}

但问题是我以后不知道如何请求布局,我可以使用addOnLayoutChangeListener吗?

就像这样:

addOnLayoutChangeListener(new OnLayoutChangeListener() {
    @Override
    public void onLayoutChange(View v, int left, int top, int right, int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom) {
        requestLayout();
    }
});

1 个答案:

答案 0 :(得分:1)

如果要在正在进行的布局传递完成后请求新布局,请查看ViewTreeObserver.OnPreDrawListenerPreDraw()方法。

  

<强> onPreDraw

     

boolean onPreDraw()

     

在即将绘制视图树时要调用的回调方法。此时,树中的所有视图都已经过测量并给出了一个框架。客户端可以使用它来调整其滚动边界,甚至可以在绘制之前请求新的布局。

还有其他方法属于ViewTreeObserver.OnPreDrawListener界面,也可能是您正在寻找的方法。

您还可以查看属于post()的{​​{1}}。 (请参阅文档here)。我相信您发布的View将在视图上完成布局后执行。这可能更符合您的要求。另请查看已接受此Stack Overflow question的答案。