在Android中,onMeasu的源码

 protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {        setMeasuredDimension(getDefaultSize(getSuggestedMinimumWidth(), widthMeasureSpec),                getDefaultSize(getSuggestedMinimumHeight(), heightMeasureSpec));    }

这里主要是getDefaultSize方法,我们看一下这个的源码

   public static int getDefaultSize(int size, int measureSpec) {        int result = size;        int specMode = MeasureSpec.getMode(measureSpec);        int specSize = MeasureSpec.getSize(measureSpec);        switch (specMode) {        case MeasureSpec.UNSPECIFIED:            result = size;            break;        case MeasureSpec.AT_MOST:        case MeasureSpec.EXACTLY:            result = specSize;            break;        }        return result;    }

可以看到,这个东西还是比较简单的,如果是未确切的则使用传过来的第一个参数,否则都是使用父类给他的specsize,那么,第一个参数是什么我们也需要去看一下

    protected int getSuggestedMinimumWidth() {        return (mBackground == null) ? mMinWidth : max(mMinWidth, mBackground.getMinimumWidth());    }

上面就是传给getDefaultSize的第一个参数,这个函数的意思是,如果有背景则使用背景大小和允许的最小size中较大的一个,如果没有背景则直接使用最小size.

接下来再看一下getDefaultSize的第二个参数,即父类设置的MeasureSpec
父类根据自己的MeasureSpec和子类参数决定子类的MeasureSpec
如果子类是确切的大小,则他的MeasureSpec是固定的,
在自定义view中我们经常需要实现wrapcontent参数,而细想一下,其实就是当需要使大小设置为自己需要的width和height,那么如何实现呢?问题的关键在于,当我们设置为wrapcontent时候,他的值会是AT_MOST,当然还有一个UNSPERCIFIED,不过因为我们的布局文件中一般viewgroup不会出现UNSPERCIFIED所以不需要考虑这个,也就是说我们只需要在getDefaultSize中考虑一下AT_MOST的情况,将AT_MOST的情况和EXACTLY的情况分开,不过光是这样还不够,因为可以看到当父类是AT_MOST时候match_parent也是AT_MOST,wrap_content分出来考虑,而match_parent的情况则和原来EXACTLY的情况一样设置为参数二中的数值即可.

更多相关文章

  1. Android(安卓)shape 参数
  2. android UI小结(二)
  3. android UI小结(二)
  4. android UI小结(二)
  5. Android(安卓)异步从网络上下载图片
  6. android发送短信
  7. android学习之RelativeLayout
  8. UI布局参数(持续更新)
  9. Android用户界面 UI组件--AdapterView及其子类(二) AdapterViewA

随机推荐

  1. Android(安卓)wifi连接
  2. Android Shader类简介之渲染图像示例
  3. Android 浏览器CSS 居中
  4. 推荐文章1
  5. Android之解析Json数据
  6. Android 项目接入Flutter
  7. Android Studio NDk调试(基于gradle-expe
  8. Android 4.0为Launcher主界面所有应用程
  9. 72、android状态栏一体化,状态栏改变颜色
  10. Android:Android(安卓)Studio 优化