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);  
                    }  
                });  
    
  • 相关阅读:
    netbeans 打开项目时没有出现咖啡哪个标记
    java swing客户端程序调试的一些方式
    java客户端布局 GroupLayout 控件、按钮等布局
    ActiveMQ 增加消息 消费消息
    HBase学习解析之起源.md
    Hadoop学习解析之资源管理调度框架YARN
    Hive学习解析之工作原理.md
    Hive学习解析之系统架构.md
    js实现ajax获取的文件base64字符串处理.md
    springboot2.x整合quartz2.x.md
  • 原文地址:https://www.cnblogs.com/sishuiliuyun/p/14280782.html
Copyright © 2011-2022 走看看