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);  
                    }  
                });  
    
  • 相关阅读:
    android中样式和自定义button样式
    android——实现多语言支持
    sizeof,数组,指针
    C++预处理相关
    内联函数
    牛客C++刷题
    leetcode刷题列表
    ends在linux和Windows下输出结果不同
    计算机负数为什么使用补码及浮点型计算
    个人技术博客:VUE:0基础入门
  • 原文地址:https://www.cnblogs.com/sishuiliuyun/p/14280782.html
Copyright © 2011-2022 走看看