zoukankan      html  css  js  c++  java
  • 当ViewGroup测量,以及为gone的时候怎么获取ViewGroup的高度

    1.测量时,需要自定义ViewGroup,实现onMeasure方法

       @Override
        protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
            super.onMeasure(widthMeasureSpec, heightMeasureSpec);
            int measuredWidth = 0;
            int measuredHeight = 0;
            final int childCount = getChildCount();
            measureChildren(widthMeasureSpec, heightMeasureSpec);
    
            int widthSpaceSize = MeasureSpec.getSize(widthMeasureSpec);
            int widthSpecMode = MeasureSpec.getMode(widthMeasureSpec);
            int heightSpaceSize = MeasureSpec.getSize(heightMeasureSpec);
            int heightSpecMode = MeasureSpec.getMode(heightMeasureSpec);
            if (childCount == 0) {
                setMeasuredDimension(0, 0);
            } else if (widthSpecMode == MeasureSpec.AT_MOST && heightSpecMode == MeasureSpec.AT_MOST) {
                final View childView = getChildAt(0);
                measuredWidth = childView.getMeasuredWidth() * childCount;
                measuredHeight = childView.getMeasuredHeight();
                setMeasuredDimension(measuredWidth, measuredHeight);
            } else if (heightSpecMode == MeasureSpec.AT_MOST) {
                final View childView = getChildAt(0);
                measuredHeight = childView.getMeasuredHeight();
                setMeasuredDimension(widthSpaceSize, childView.getMeasuredHeight());
            } else if (widthSpecMode == MeasureSpec.AT_MOST) {
                final View childView = getChildAt(0);
                measuredWidth = childView.getMeasuredWidth() * childCount;
                setMeasuredDimension(measuredWidth, heightSpaceSize);
            }
        }
    

     然后在调用this.getMeasuredHeight();就可以获取了。

     this.getMeasuredHeight();
    

     2.当view为gone的时候怎么获取view的高度

    在项目开发中,遇到了 当view为gone时 测量高度一直为0,解决办法:

    mView.getViewTreeObserver().addOnGlobalLayoutListener( 
        new OnGlobalLayoutListener(){
     
            @Override
            public void onGlobalLayout() {
                // gets called after layout has been done but before display
                // so we can get the height then hide the view    
     
                mHeight = mView.getHeight();  
     
                mView.getViewTreeObserver().removeOnGlobalLayoutListener(this);
                mView.setVisibility(View.GONE);
            }
     
    });
    

     默认先让他显示,而加载完成,则进行View.GONE,就可以了。

  • 相关阅读:
    饿汉模式单例模板
    QT高级01----自定义日志工具
    QT基础01----添加应用程序图标
    QML博客转载
    QML---自定义滚动条
    Mycat的做分库正确步骤
    Spring Cloud sentinel使用总结
    SpringCloud之Gateway原理解析(二)--调用过程
    SpringCloud之Gateway原理解析(一)--准备
    SpringCloud之Feign注解@EnableFeignClients
  • 原文地址:https://www.cnblogs.com/lixiangyang521/p/13092725.html
Copyright © 2011-2022 走看看