我们知道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.

更多相关文章

  1. Android(安卓)SharedPreferences mode 的模式说明
  2. layout 布局
  3. 最全面的Android(安卓)Studio使用教程(图文)
  4. android 设计模式之代理模式
  5. android自定义控件基础
  6. Acitivity加载模式说起
  7. ScrollView嵌套LinearLayout布局不能撑满全屏的问题
  8. Android运行模式 未验证
  9. 关于LayoutInflate和View-infalte的参数意义以及区别总结

随机推荐

  1. 工程师淘金:开发Android主攻四大方向
  2. 获取Android自己写好了的apk以及反编译
  3. 工程师淘金:开发Android主攻四大方向
  4. android 数据储存——网络存储(5)
  5. 【Android(安卓)Dev Guide - 01】 - What
  6. Android视图绘制流程完全解析,带你一步步
  7. Android(安卓)自定义组合控件
  8. 【Android自动化打包】03. APK的数字签名
  9. 一场关于Android的争论
  10. Android(安卓)开机启动应用