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

  • 相关阅读:
    Java中如何利用File类递归的遍历指定目录中的所有文件和文件夹
    SQL的别名和SQL的执行顺序和SQL优化
    Linux中如何配置sudo用户
    Linux的ssh的known_host文件
    Linux的SSH服务
    Linux的图形模式和文本模式以及单用户模式切换
    Linux服务器磁盘空间占满问题
    PLSQL Developer连接本地Oracle 11g数据库
    Linux常用命令学习
    OAuth2 .net MVC实现获取token
  • 原文地址:https://www.cnblogs.com/lixiangyang521/p/13092725.html
Copyright © 2011-2022 走看看