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,就可以了。

  • 相关阅读:
    Linux 删除用户时报错:userdel: user zhoulijiang is currently used by process 1
    mysqldump: Error: Binlogging on server not active
    Java并发编程:阻塞队列
    Java并发编程:线程池的使用
    Java并发编程:CountDownLatch、CyclicBarrier和Semaphore
    Java并发编程:线程间协作的两种方式:wait、notify、notifyAll和Condition
    Java常用排序算法/程序员必须掌握的8大排序算法
    KMP算法
    Java NIO:浅析I/O模型
    Java NIO:NIO概述
  • 原文地址:https://www.cnblogs.com/lixiangyang521/p/13092725.html
Copyright © 2011-2022 走看看