Android中view的测量过程中,很重要的也很难理解的一个东西MeasureSpec
2017-06-05 22:27
330 查看
Android的app开发时,自定义view是一个很普遍、重要、容易提升用户体验的一个办法。
自定义view的3个关键点是,测量、摆放、绘制。
本文主要就测量中一个很重要的也很难理解的东西MeasureSpec,作一个小小的解析,如有错漏,还请不吝赐教。
view有子view的话,则父view和子view之间要有个协商,以避免子view的大小超过了父view的大小,导致子view显示不全(一个关键逻辑是,子view的显示区域不超过父view的显示区域)。当然子view不并一定要按照这个协商来设定自身的大小,但是一般还是参照这个协商来设定自身的大小。
这个协商,则是通过MeasureSpec来实现的。宽和高,各有一个协商,即各有一个MeasureSpec。
measureSpec是一个32位的int,前2位表示协商模式,后30位表示参考大小,协商模式有3种,
EXACTLY(特定) 表示父view希望子view,把自己的大小设置为,参考大小的值
AT_MOST(不超过) 表示父view希望子view,把自己的大小设置为,不超过参考大小的值
UNSPECIFIED(随意) 表示父view希望子view,把自己的大小设置为,随意大小,子view想怎么设置就怎么设置
例子1 一个父view把自身的大小设置为,宽300px,高400px,它传给子view的用来协商大小的measureSpec,协商模式是AT_MOST,参考大小是宽300px,高400px,那么父view的意思就是,希望子view不要把自己的大小设置的超过了宽300px,高400px,否则容易导致子view显示不全。
例子2 一个父view把自身的大小设置为,宽300px,高400px,它传给子view的用来协商大小的measureSpec,协商模式是EXACTLY, 参考大小是宽300px,高210px,那么父view的意思就是,希望子view把自己的大小就设置为宽270px,高210px,也就是父view希望子view宽是特定的270px,高是特定的210px
例子3 一个父view把自身的大小设置为,宽300px,高400px,它传给子view的用来协商大小的measureSpec,协商模式是UNSPECIFIED,参考大小是宽300px,高400px,那么父view的意思就是,希望子view设置自己的大小时,随意设置,子view想怎么设置就怎么设置。这种情况一般见于,类似listview的自定义view,子view的高度可以随意,比父view高也没关系,因为可以滑动显示。
自定义view的3个关键点是,测量、摆放、绘制。
本文主要就测量中一个很重要的也很难理解的东西MeasureSpec,作一个小小的解析,如有错漏,还请不吝赐教。
view有子view的话,则父view和子view之间要有个协商,以避免子view的大小超过了父view的大小,导致子view显示不全(一个关键逻辑是,子view的显示区域不超过父view的显示区域)。当然子view不并一定要按照这个协商来设定自身的大小,但是一般还是参照这个协商来设定自身的大小。
这个协商,则是通过MeasureSpec来实现的。宽和高,各有一个协商,即各有一个MeasureSpec。
measureSpec是一个32位的int,前2位表示协商模式,后30位表示参考大小,协商模式有3种,
EXACTLY(特定) 表示父view希望子view,把自己的大小设置为,参考大小的值
AT_MOST(不超过) 表示父view希望子view,把自己的大小设置为,不超过参考大小的值
UNSPECIFIED(随意) 表示父view希望子view,把自己的大小设置为,随意大小,子view想怎么设置就怎么设置
例子1 一个父view把自身的大小设置为,宽300px,高400px,它传给子view的用来协商大小的measureSpec,协商模式是AT_MOST,参考大小是宽300px,高400px,那么父view的意思就是,希望子view不要把自己的大小设置的超过了宽300px,高400px,否则容易导致子view显示不全。
例子2 一个父view把自身的大小设置为,宽300px,高400px,它传给子view的用来协商大小的measureSpec,协商模式是EXACTLY, 参考大小是宽300px,高210px,那么父view的意思就是,希望子view把自己的大小就设置为宽270px,高210px,也就是父view希望子view宽是特定的270px,高是特定的210px
例子3 一个父view把自身的大小设置为,宽300px,高400px,它传给子view的用来协商大小的measureSpec,协商模式是UNSPECIFIED,参考大小是宽300px,高400px,那么父view的意思就是,希望子view设置自己的大小时,随意设置,子view想怎么设置就怎么设置。这种情况一般见于,类似listview的自定义view,子view的高度可以随意,比父view高也没关系,因为可以滑动显示。
相关文章推荐
- Android Recipes笔记 通过一个自定义控件看android view测量过程。
- 快速理解android View的测量onMeasure()与MeasureSpec
- Android之View的视图测量过程
- Layout inflation在Android环境中是一个专业术语,用于表示某个XML资源布局文件被解析并转化成为一个层级的View对象的过程。
- Android View深入学习(一),View的测量(Measure)过程
- Android View 测量过程
- android onMeasure测量过程中MeasureSpec学习
- Android中measure过程、view绘制原理和MeasureSpec介绍及使用详解
- 【Android小品】从使用出发完全理解View(ViewGroup)测量机制,并分析部分源码(修复图片)
- android view 的测量过程
- Android进阶之路 - RecyclerView 滑动顶部实现过程与ScrollListener内部方法理解
- Android View的测量过程
- Android ViewGroup测量child过程
- 从源码角度看一个view和ViewGroup的测量过程
- 给一个android的TextView设置背景颜色动态显示,到那时好像不起作用。我是少了什么东西么?
- Android中View的MeasureSpec以及Measure的过程
- Android 自定义View 测量控件大小onMeasure中MeasureSpec作用
- Android 一个小例子理解实际开发中坐标计算的过程
- 简单研究Android View绘制一 测量过程
- Android之View的视图测量过程