码迷,mamicode.com
首页 > 移动开发 > 详细

Android--自定义ViewGroup()

时间:2015-10-05 18:11:18      阅读:200      评论:0      收藏:0      [点我收藏+]

标签:

 Measure的本质是:把试图布局时的相对值转化为具体值。
 MeasureSpec类包装了从parent传递下来的布局要求,每一个MeasureSpec代表了对宽度和高度的一个要求。

 

为什么布局需要父视图与子视图共同决定? 为什么不直接设置宽和高?
  如果不这样就像HTML那样指定固定大小,这样会造成一个过大把另外一个挤出去。因为HTML是具有整个页面的控制权。
  而Android是拆分开的,这样做保证了最末端的(界面开发)影响其他层级的布局,需要按照(控件开发)的规则来。
view.setWidth, view.setHeight ? 不是
需要通过measureChilde(view, width, height), 或者childView.measure();

View.getWidth(), View.getHight()
View.getMeasureWidth(), View.getMeasureHiegh()
 一个未添加到视图中的? 但是有时getMesureHeight 依然是返回0。为什么?ec是一个android.view.View的内部类,封装了从父类传送到子类的布局要求信息。

 

 

ViewGroup提供的measure方法

measureChildren() - 该函数内使用for()循环调用measureChild()对每一个子视图进行measure操作
measureChild() - 为每一个子视图进行measure操作
measureChildWidthMargins() - 该函数与measureChild的唯一区别在于,measure时考虑把margin及padding也作为子视图大小的一部分

 

有一个约定:在覆写onMeasure方法的时候,必须调用 setMeasuredDimension(int,int)来存储这个View经过测量得到的measured width and height。如果没有这样做。将会由measure(int, int)方法抛出一个IllegalStateException。

 

measure(int widthMeasureSpec, int heightMeasureSpec),由于图片都是正方形,所以宽和高的值是一样的。

覆写onMeasure方法的时候,子类有责任确保measured height width至少为这个View的最小height和width。

setMeasuredDimension(resWidth, resHeight);

根据设置的图的尺寸,获取此控件的最小可用值(如果设置了android:minwidth)

如果没有背景图,那么取默认的尺寸,默认其实就是屏幕宽和高中的小值

 

Android--自定义ViewGroup()

标签:

原文地址:http://www.cnblogs.com/zrui513/p/4855917.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!