一个MeasureSpec封装了父布局传递给子布局的布局要求,每个MeasureSpec代表了一组宽度和高度的要求。一个MeasureSpec由大小和模式组成。它有三种模式:UNSPECIFIED(未指定),父元素部队自元素施加任何束缚,子元素可以得到任意想要的大小;EXACTLY(完全),父元素决定自元素的确切大小,子元素将被限定在给定的边界里而忽略它本身大小;AT_MOST(至多),子元素至多达到指定大小的值。

  它常用的三个函数:

1.static int getMode(int measureSpec):根据提供的测量值(格式)提取模式(上述三个模式之一)

2.static int getSize(int measureSpec):根据提供的测量值(格式)提取大小值(这个大小也就是我们通常所说的大小)

3.static int makeMeasureSpec(int size,int mode):根据提供的大小值和模式创建一个测量值(格式)

mode共有三种情况,取值分别为MeasureSpec.UNSPECIFIED, MeasureSpec.EXACTLY, MeasureSpec.AT_MOST。

MeasureSpec.EXACTLY是精确尺寸,当我们将控件的layout_width或layout_height指定为具体数值时如andorid:layout_width="50dip",或者为FILL_PARENT是,都是控件大小已经确定的情况,都是精确尺寸。

MeasureSpec.AT_MOST是最大尺寸,当控件的layout_width或layout_height指定为WRAP_CONTENT时,控件大小一般随着控件的子空间或内容进行变化,此时控件尺寸只要不超过父控件允许的最大尺寸即可。因此,此时的mode是AT_MOST,size给出了父控件允许的最大尺寸。

MeasureSpec.UNSPECIFIED是未指定尺寸,这种情况不多,一般都是父控件是AdapterView,通过measure方法传入的模式。

那么这些模式和我们平时设置的layout参数fill_parent, wrap_content有什么关系呢?
       经过代码测试就知道,当我们设置width或height为fill_parent时,容器在布局时调用子 view的measure方法传入的模式是EXACTLY,因为子view会占据剩余容器的空间,所以它大小是确定的。
       而当设置为 wrap_content时,容器传进去的是AT_MOST, 表示子view的大小最多是多少,这样子view会根据这个上限来设置自己的尺寸。当子view的大小设置为精确值时,容器传入的是EXACTLY, 而MeasureSpec的UNSPECIFIED模式目前还没有发现在什么情况下使用。   
       View的onMeasure方法默认行为是当模式为UNSPECIFIED时,设置尺寸为mMinWidth(通常为0)或者背景drawable的最小尺寸,当模式为EXACTLY或者AT_MOST时,尺寸设置为传入的MeasureSpec的大小。 
   
       有个观念需要纠正的是,fill_parent应该是子view会占据剩下容器的空间,而不会覆盖前面已布局好的其他view空间,当然后面布局子 view就没有空间给分配了,所以fill_parent属性对布局顺序很重要。以前所想的是把所有容器的空间都占满了,难怪google在2.2版本里把fill_parent的名字改为match_parent.
  在两种情况下,你必须绝对的处理这些限制。在一些情况下,它可能会返回超出这些限制的尺寸,在这种情况下,你可以让父元素选择如何对待超出的View,使用裁剪还是滚动等技术。

MeasureSpec介绍及使用详解相关推荐

  1. DL之DilatedConvolutions:Dilated Convolutions(膨胀卷积/扩张卷积)算法的简介(论文介绍)、架构详解、案例应用等配图集合之详细攻略

    DL之DilatedConvolutions:Dilated Convolutions(膨胀卷积/扩张卷积)算法的简介(论文介绍).架构详解.案例应用等配图集合之详细攻略 目录 Dilated Con ...

  2. DL之ShuffleNetV2:ShuffleNetV2算法的简介(论文介绍)、架构详解、案例应用等配图集合之详细攻略

    DL之ShuffleNetV2:ShuffleNetV2算法的简介(论文介绍).架构详解.案例应用等配图集合之详细攻略 目录 ShuffleNetV2算法的简介(论文介绍) 1.论文特点 2.基于硬件 ...

  3. DL之ShuffleNet:ShuffleNet算法的简介(论文介绍)、架构详解、案例应用等配图集合之详细攻略

    DL之ShuffleNet:ShuffleNet算法的简介(论文介绍).架构详解.案例应用等配图集合之详细攻略 相关文章 DL之ShuffleNet:ShuffleNet算法的简介(论文介绍).架构详 ...

  4. DL之MobileNetV2:MobileNetV2算法的简介(论文介绍)、架构详解、案例应用等配图集合之详细攻略

    DL之MobileNet V2:MobileNet V2算法的简介(论文介绍).架构详解.案例应用等配图集合之详细攻略 目录 MobileNetV2算法的简介(论文介绍) MobileNet V2算法 ...

  5. DL之MobileNet:MobileNet算法的简介(论文介绍)、架构详解、案例应用等配图集合之详细攻略

    DL之MobileNet:MobileNet算法的简介(论文介绍).架构详解.案例应用等配图集合之详细攻略 目录 MobileNet算法的简介(论文介绍) 1.研究背景 2.传统的模型轻量化常用的方法 ...

  6. DL之SqueezeNet:SqueezeNet算法的简介(论文介绍)、架构详解、案例应用等配图集合之详细攻略

    DL之SqueezeNet:SqueezeNet算法的简介(论文介绍).架构详解.案例应用等配图集合之详细攻略 目录 SqueezeNet算法的简介(论文介绍) 1.轻量级的CNN架构优势 2.主要特 ...

  7. DL之DenseNet:DenseNet算法的简介(论文介绍)、架构详解、案例应用等配图集合之详细攻略

    DL之DenseNet:DenseNet算法的简介(论文介绍).架构详解.案例应用等配图集合之详细攻略 目录 DenseNet算法的简介(论文介绍) DenseNet算法的架构详解 3.DenseNe ...

  8. DL之ResNeXt:ResNeXt算法的简介(论文介绍)、架构详解、案例应用等配图集合之详细攻略

    DL之ResNeXt:ResNeXt算法的简介(论文介绍).架构详解.案例应用等配图集合之详细攻略 目录 ResNeXt算法的简介(论文介绍) ResNeXt算法的架构详解 ResNeXt算法的案例应 ...

  9. DL之FCN:FCN算法的简介(论文介绍)、架构详解、案例应用等配图集合之详细攻略

    DL之FCN:FCN算法的简介(论文介绍).架构详解.案例应用等配图集合之详细攻略 目录 FCN算法的简介(论文介绍) 0.FCN性能-实验结果 1.全卷积神经网络的特点.局限性.缺点 FCN算法的架 ...

  10. DL之Xception:Xception算法的简介(论文介绍)、架构详解、案例应用等配图集合之详细攻略

    DL之Xception:Xception算法的简介(论文介绍).架构详解.案例应用等配图集合之详细攻略 目录 Xception算法的简介(论文介绍) 1.论文使用的数据集 Xception算法的架构详 ...

最新文章

  1. windows7下GithubDesktop和极域学生客户端冲突导致无法正常打开解决方案
  2. protoc.exe java_protobuf——使用protoc.exe生成message文件
  3. eclipse创建springboot项目_idea创建基于gradle构建的spring boot项目
  4. 洛谷P5173 传球(暴力)
  5. mysql安装im,mysql安装记录
  6. LinuxC高级编程——线程间同步
  7. 两个时间的差值Java,Java如何找到两个时间之间的差值?
  8. 触控游戏的设计—Windows Phone 7游戏开发
  9. RMI、RPC、SOAP通信技术介绍及比对
  10. CCNA自学教材推荐(转)
  11. html网页右侧悬浮代码,网页右侧漂浮广告窗口的js代码
  12. 【FusionCompute】基于FreeNAS部署并使用虚拟存储(五)
  13. 特斯拉model3中控屏怎么关_特斯拉Model 3为什么取消仪表盘? - 全文
  14. 箱形图在实际数据分析中的应用
  15. Orz是什么意思……
  16. 学生个人网页设计作品 HTML+CSS+JavaScript仿小米商城(8页) 学生个人网页模板 简单个人主页成品 个人网页制作 HTML学生个人网站作业设计代做
  17. hp台式计算机硬盘如何取出,惠普台式机不读硬盘怎么办
  18. 【项目总结】医疗化验单的OCR识别
  19. java 8 Collectors.toMap 重复key 值处理、value为null处理
  20. 戮力同心,精诚协作 Stibo Systems(思迪博)和点春科技正式签署战略合作伙伴协议

热门文章

  1. Mahony 互补滤波
  2. csdm makerdown使用
  3. python3.6 numpy下载_numpy下载安装 NumPy MKL v1.13.1 cp36 for Python3.6 官方安装版 64位 下载-脚本之家...
  4. RSA加密工具类库C#,可加密二进制数组(用来加密文件)
  5. python编写移位密码实现加密与解密
  6. xp系统telnet服务器,xp电脑telnet服务器
  7. 微信小程序-人脸识别
  8. GoComb.com搜索引擎问世:改进搜索体验
  9. excel表格显示无法连接服务器,excel中表格无法连接数据库-EXCEL 连接SQL SERVER数据库显示无法连接...
  10. [读书笔记] 有效竞品分析