Android之getViewTreeObserver().addOnGlobalLayoutListener() 的意义

【情景】 有时候需要在onCreate方法中知道某个View组件的宽度和高度等信息,而直接调用View组件的getWidth()、getHeight()、getMeasuredWidth()、getMeasuredHeight()、getTop()、getLeft()等方法是无法获取到真实值的,只会得到0。

【友情链接】 http://blog.csdn.net/linghu_java/article/details/46544811

【原因】   因为View组件布局要在onResume回调后完成。所以现在需要使getViewTreeObserver().addOnGlobalLayoutListener()来获得宽度或者高度。这是获得一个view的宽度和高度的方法之一。

OnGlobalLayoutListener 是ViewTreeObserver的内部类,当一个视图树的布局发生改变时,可以被ViewTreeObserver监听到,这是一个注册监听视图树的观察者(observer),在视图树的全局事件改变时得到通知。ViewTreeObserver不能直接实例化,而是通过getViewTreeObserver( )获得。

【代码实现】

int mHeaderViewHeight;

mHeaderView.getViewTreeObserver( ).addOnGlobalLayoutListener(

        new OnGlobalLayoutListener() {

            @Override

            public void onGlobalLayout() {

                mHeaderViewHeight = mHeaderView.getHeight();

                  getViewTreeObserver() .removeGlobalOnLayoutListener(this);

            }

        });

【注】  但是需要注意的是OnGlobalLayoutListener可能会被多次触发,因此在得到了高度之  后,要将OnGlobalLayoutListener注销掉。

除了OnGlobalLayoutListener ,ViewTreeObserver还有如下内部类:1) interface ViewTreeObserver.OnGlobalFocusChangeListener

        当在一个视图树中的焦点状态发生改变时,所要调用的回调函数的接口类

(2)interface  ViewTreeObserver.OnGlobalLayoutListener

当在一个视图树中全局布局发生改变或者视图树中的某个视图的可视状态发生改变时,所要调用的回调函数的接口类

(3)interface ViewTreeObserver.OnPreDrawListener

当一个视图树将要绘制时,所要调用的回调函数的接口类

(4) interface  ViewTreeObserver.OnScrollChangedListener

当一个视图树中的一些组件发生滚动时,所要调用的回调函数的接口类

(5)interface  ViewTreeObserver.OnTouchModeChangeListener

当一个视图树的触摸模式发生改变时,所要调用的回调函数的接口类

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 175,911评论 25 709
  • 在Android系统中,有一种特殊的视图,称为SurfaceView,它拥有独立的绘图表面,即它不与其宿主窗口共享...
    一个不掉头发的开发阅读 13,910评论 12 74
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 32,287评论 18 399
  • 目标:10B 还是没能很好的跟进会员,是自己大意或者是没找对方法,让自己的跟进很被动被难。今天帮同学办理入会及确定...
    Mela仙仙阅读 1,085评论 0 0
  • 【言词永远是传达真实情况的二手信息;言词存在理解误区】 作者 | 陈山水 有关真气运行的教学,我比较关注三个主题。...
    c401e7219c3d阅读 6,428评论 0 2

友情链接更多精彩内容