zoukankan      html  css  js  c++  java
  • Android中view.getViewTreeObserver()使用

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

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

    ViewTreeObserver不能直接实例化,而是通过getViewTreeObserver()获得。

    补充
    除了OnGlobalLayoutListener ,ViewTreeObserver还有如下内部类:

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

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

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

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

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

    利用OnGlobalLayoutListener来获得一个视图的真实高度

        int mHeaderViewHeight;  
        mHeaderView.getViewTreeObserver().addOnGlobalLayoutListener(  
                new OnGlobalLayoutListener() {  
                    @Override  
                    public void onGlobalLayout() {  
                                                                                                                                                                                                                                                
                        mHeaderViewHeight = mHeaderView.getHeight();
    		    //OnGlobalLayoutListener可能会被多次触发,因此在得到了高度之后,
    		    //要将OnGlobalLayoutListener注销掉  
                        getViewTreeObserver().removeGlobalOnLayoutListener(this);  
                    }  
                });  
    
  • 相关阅读:
    Photoshop
    你会为了钱出售自己的个人资料吗?
    [ElasticSearch] 空间搜索 (一)
    hdu1584 A strange lift (电梯最短路径问题)
    Android API Guides---OpenGL ES
    Qt 推断一个IP地址是否有效
    bzoj1670【Usaco2006 Oct】Building the Moat 护城河的挖掘
    集成学习1-Boosting
    微信开发模式之自己定义菜单实现
    人件札记:开放式的办公室环境
  • 原文地址:https://www.cnblogs.com/sishuiliuyun/p/14280782.html
Copyright © 2011-2022 走看看