美文网首页
ViewTreeObserver监听view视图绘制

ViewTreeObserver监听view视图绘制

作者: 花漫旧城夏天 | 来源:发表于2020-12-02 13:27 被阅读0次

    在很多时候,我们在绘制视图的时候,比如添加控件的时候,需要设置宽高或者为某个控件添加xy的时候,以及动态添加控件的时候,我们常常需要依赖于别的控件。比如,我要显示一个popupwindow,然后需要显示的位置是在某一个控件的下方,有时候我们就需要用到别的控件的具体位置,但是在初始化的时候,我们获取到的控件的具体位置一般都是0。比如获取一些控件的宽高,获取到的是0,因为视图还没有获取完成。当视图绘制完成之后,再去获取宽高,就能得到正常的宽高。这个时候就需要ViewTreeObserver。ViewTreeObserver viewTreeObserver=titleView.getViewTreeObserver();

    viewTreeObserver.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {

    @Override

        public void onGlobalLayout() {

            Log.d("20201202", "titleView的高度:" +titleView.getHeight());

    }

    });

    这样的话,每次titleView绘制完成之后,都会调用这个方法。这个时候就可以获取到这个控件的正常的宽高了。如果只是想获取一次,那么就需要在第一次获取成功之后,在onGlobalLayout() 里面加入titleView.getViewTreeObserver().removeOnGlobalLayoutListener(this);不再监听这个视图的绘制。

    相关文章

      网友评论

          本文标题:ViewTreeObserver监听view视图绘制

          本文链接:https://www.haomeiwen.com/subject/dybywktx.html