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

  • 相关阅读:
    [转]项目管理---敏捷开发思想---带来相当愉快的项目开发过程
    [转] 项目管理---项目经理如何应对客户的需求变更?
    [转]C# 线程知识--使用Task执行异步操作
    [转]细说ASP.NET的各种异步操作
    [转]oracle表分区详解
    解决Asp.net 部署后弹出登陆框
    SVN客户端TortoiseSVN安装配置图文教程
    .net版本区别及发展历程
    CLR via c#读书笔记九:字符、字符串和文本处理
    CLR via c#读书笔记九:接口
  • 原文地址:https://www.cnblogs.com/lixiangyang521/p/13092725.html
Copyright © 2011-2022 走看看