我们知道View在屏幕上显示出来要先经过measure和layout. 在调用onMeasure(int widthSpec, int heightSpec)方法时,要涉及到MeasureSpec的使用,MeasureSpec有3种模式分别是UNSPECIFIED, EXACTLY和AT_MOST, 那么这些模式和我们平时设置的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的onMeasure方法理解相关推荐

  1. android中对View的onMeasure()方法的理解

    在android开发中,很多人对自定义View是望而生畏,我也一样,但这又是向高级进阶的必经之路,主要是对View里面的很多方法不知道怎么理解,其中一个就是onMeasure()方法,网上有很多这样解 ...

  2. Android中自定义view的onMeasure()方法详谈

    背景 理解MeasureSpec MeasureSpec 情况分析 结合图例分析 总结 A little bit of progress every day!Come on! 背景 首先关于自定义vi ...

  3. View 的 onMeasure 方法

    View 的测量过程中,有一个比较重要的类需要掌握:MeasureSpec.我们在阅读源码的时候会发现,在 View 的测量过程中,MeasureSpec 是一个会经常出现的类,如果不先掌握这个类的话 ...

  4. 自定义View之onMeasure()方法

    前言 一个View从创建到被绘制到屏幕上,需要完成measure(测量).layout(布置).draw(绘制)三个步骤,分别对应View中的measure().layout().draw()三个方法 ...

  5. View onMeasure 方法

    先看一篇博客 https://www.jianshu.com/p/3b6d0c17cdb0 再看这张图 image.png 1.这里的 AT_MOST.EXACTLY.UNSPECIFIED 分别对应 ...

  6. Android View.onMeasure方法的理解

    View在屏幕上显示出来要先经过measure(计算)和layout(布局). 1.什么时候调用onMeasure方法?  当控件的父元素正要放置该控件时调用.父元素会问子控件一个问题,"你 ...

  7. Andoid自定义View的OnMeasure详解和自定义属性

    一,OnMeasure详解 Android开发中偶尔会用到自定义View,一般情况下,自定义View都需要继承View类的onMeasure方法,那么,为什么要继承onMeasure()函数呢?什么情 ...

  8. android view 绘制过程,深入理解Android中View绘制的三大流程

    前言 最近对Android中View的绘制机制有了一些新的认识,所以想记录下来并分享给大家.View的工作流程主要是指measure.layout.draw这三大流程,即测量.布局和绘制,其中meas ...

  9. 【Android】自定义view之onMeasure

    1 onMeasure什么时候会被调用 onMeasure方法的作用是测量控件的大小,当我们创建一个View(执行构造方法)的时候不需要测量控件的大小,只有将这个view放入一个容器(父控件)中的时候 ...

最新文章

  1. TensorRT深度学习训练和部署图示
  2. 用一篇文章说清楚如何写作
  3. centos7 mariadb mysql max_connections=214 无法修改的问题
  4. matlab自动给变量命名
  5. java io删除文件_java IO 文件操作方法总结
  6. 解决PHP生成校验码时“图像因其本身有错无法显示”的错误
  7. OPenGL实例化绘制、普通绘制说明
  8. C++ 类中特殊的成员变量(常变量、引用、静态)的初始化方法
  9. springCloud(微服务的概念)1-1
  10. graphpad如何检测方差齐_如何选择方差分析的多重比较方法?资料集锦
  11. 区域显示触发_Nature Communications:地幔数据显示可氧化的火山气体的减少可能触发了大氧化事件...
  12. 董付国老师《Python程序设计基础》完美落幕
  13. HTML5 Canvas 车架号第十位是L,汽车生产日期字母对照
  14. pod访问外部mysql_Pod中访问外部的域名配置
  15. Selenium(一)12.Actions的常用方法
  16. EI CCIE企业基础架构技术 什么是DNAC ?-IELAB
  17. aws云服务器会自动扣费吗,AWS云服务免费套餐竟然扣钱了?可能是因为你的region没管好...
  18. revit管线插件:当前楼层怎么显示楼板以下的给排水管道?
  19. ae形状图层怎样合并路径?
  20. 《美队3》没融入VR,罗素兄弟想在“妇联3”寻找机会

热门文章

  1. 华为交换机 access,trunk,hybrid理解,需一点基础,应该是最完整的
  2. 菜鸟教程---语言学习利器
  3. 微信小程序引用本地js里的json数据
  4. 绘制打印真实尺寸大小的图形曲线
  5. 【Get深一度】dB、dBm、dBW和W换分别代表的含义及换算关系
  6. iOS用推送通知来做出聊天
  7. 国产android系统哪个好用吗,国产手机中哪个系统优化的最好
  8. 自考路之大渡考场路远寒
  9. 免校准的电量计量芯片_具有免校准和带漏电检测功能的计量芯片HLW8112
  10. 大学图书馆空间再造与服务创新研究