现在的位置: 首页 > web前端 > 正文

android MeasureSpec中的测量模式和match_parent wrap_content

2020年07月15日 web前端 ⁄ 共 978字 ⁄ 字号 评论关闭

  在安卓View的measure过程中,measureSpec扮演着重要的作用。MeasureSpec是一个32位的int,前2位代表模式,其中00代表UNSPECIFIED,01代表EXACTLY,10代表ATMOST,后30位代表具体大小,例如1073741824模式为EXACTLY,大小为1080。


  measurespec是什么意思


  在ViewGroup中有一个getChildMeasureSpec方法用于根据父ViewGroup的MeasureSpec模式和子view的wrap_content、match_parent或xxdp确定子view的MeasureSpec模式,具体规则如下图,第二行是父view调用子view的measure函数测量的时候传递的参数,childSize是子view的大小(没错,是父view包办的婚姻,子view只是执行),parentSize是父view的剩余大小(表示子view的大小自己测,但是不要超出这个大小),0表示父view对子view没有任何约束,想多大就多大。


  measurespec的方法


  初次接触看到这两张图一定是云里雾里不知所云,这几种模式到底和xml布局文件中的wrap_content、match_parent有啥关系?我尽量清楚地解释一下转换的过程。在xml布局文件中有三种写法wrap_content、match_parent,xxdp,程序并不直接处理这些而是会对他们做转换,程序加载的时候会把这些参数读取到LayoutParams对象中保存起来,然后开始从根view遍历整棵view树,这里的根view并不是我们在xml文件中写的view,而是系统内置的DecorView,从DecorView到xml的view中间还有好多层,不过和主题关系不大就不展开说了,只需要知道xml布局中的上一层view的模式是EXACTLY就够了(毕竟屏幕大小是确定的),按上面的表格,如果我们的布局是match_parent则模式为EXACTLY,如果我们的布局是wrap_content则模式为AT_MOST。知道这个前提再根据上面的表格我们便可以很“轻松”地推断出所有的view是什么模式的,大小应该是多少。


  总之,measurespec给大家简单的介绍了一些,希望大家多看看。


  

抱歉!评论已关闭.