private void measureView(View child) {
ViewGroup.LayoutParams params = child.getLayoutParams();
if (params == null) {
params = new ViewGroup.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.WRAP_CONTENT);
}
int childWidthSpec = ViewGroup.getChildMeasureSpec(0, 0,
params.width);
/*getChildMeasureSpec
在加入API级别1
INT getChildMeasureSpec(INT规范,
INT填充,
INT childDimension)
是否measureChildren困难的部分:搞清楚MeasureSpec
传递给特定的孩子。此方法计算出正确的MeasureSpec用于一
个子视图的一个维度(高度或宽度)。我们的目标是资讯从Meas
ureSpec与孩子的LayoutParams结合起来,以获得最好的结果。
例如,如果这个观点知道它的大小(因为它MeasureSpec有整整模式)
,并且孩子在的LayoutParams已经表示,它希望成为的尺寸与父母一样,
家长应让孩子布局给出精确的尺寸。/
int lpHeight = params.height;
int childHeightSpec;
if (lpHeight > 0) {
childHeightSpec = View.MeasureSpec.makeMeasureSpec(lpHeight,
View.MeasureSpec.EXACTLY);
//makeMeasureSpec创建基于所提供的大小和模式度量规范。
} else {
childHeightSpec = View.MeasureSpec.makeMeasureSpec(0,
View.MeasureSpec.UNSPECIFIED);//
/ int AT_MOST
测量规范方式:因为它要到指定大小的孩子可大。
int EXACTLY
测量规范模式:父母已决定为孩子的确切大小。
int UNSPECIFIED
测量规范模式:父母没有强加给孩子任何约束。/
}
child.measure(childWidthSpec, childHeightSpec);
/空隙的措施(INT widthMeasureSpec,
INT heightMeasureSpec)
这就是所谓的找出一个观点应该多大。父供给在宽度和高度参数约束信息。
一针对实际计测操作被执行。在 onMeasure(int, int)通过此方法调用的。因此,只有 onMeasure(int, int)能够而且必须由子类覆盖。
参数
widthMeasureSpec int:所施加由母公司水平空间要求
heightMeasureSpec int:垂直空间的要求强加父
*/
}
网友评论