检测ViewTreeObserver全局布局上次调用

时间:2017-08-14 14:26:54

标签: android android-layout android-viewtreeobserver

我已经看过很多关于ViewTreeObserver的问题(和答案),但没有人完全回答我面临的问题/问题。所以这就是我所拥有的:

我在scrollview中以编程方式添加了一些视图。设置完所有布局后,我想滚动到scrollview内的特定视图。为此,我使用View Tree Observer,代码如下(我正在做的一些伪)

viewInsideScrollView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
            @Override
            public synchronized void onGlobalLayout() {
                firstTime++; // Counts how many times I enter the listener
                if (firstTime == 1) {
                    // Here the fully measure of the scroll view has not happened
                } else if (firstTime == 2) {
                    // I still don't have the full measure of the scroll view (Let's say that, for example, paddings are missing/weren't calculated)
                } else if (firstTime == 3) {
                    // Here is when I can safely get the locationOfTheView variable and the scroll down will happen perfectly!
                    viewInsideScrollView.getViewTreeObserver().removeOnGlobalLayoutListener(this);
                    scrollView.scrollTo(0, locationOfTheView);
                }
            }
        });

注意:我添加firstTime == 3的原因是,在这种特定情况下,我注意到它只调用了3次全局布局。

所以我的问题如下:如何彻底检测全局布局何时完成所有必要的测量?

是的,我有一些工作方式,例如添加一个小延迟,这将为全局布局提供时间来完成它的措施,但我正在寻找另一种(更清洁)的方法来做到这一点。

有什么想法吗? 谢谢!

0 个答案:

没有答案