private int getHeightSize(int heightmeasureSpec) {
int size = 0;
int spec_mode = MeasureSpec.getMode(heightmeasureSpec);
int spec_size = MeasureSpec.getSize(heightmeasureSpec);
if (spec_mode == MeasureSpec.EXACTLY) {
System.out.println("exactly");
size = spec_size;
} else if (spec_mode == MeasureSpec.AT_MOST) {
System.out.println("at_most");
size = textSize;
} else if (spec_mode == MeasureSpec.UNSPECIFIED) {
System.out.println("unspecified");
size = 100;
}
return size;
}
private int getWidthSize(int widthmeasureSpec) {
int size = 0;
int spec_mode = MeasureSpec.getMode(widthmeasureSpec);
int spec_size = MeasureSpec.getSize(widthmeasureSpec);
if (spec_mode == MeasureSpec.EXACTLY) {
System.out.println("exactly");
size = spec_size;
} else if (spec_mode == MeasureSpec.AT_MOST) {
System.out.println("at_most");
size = textSize * text.length();
} else if (spec_mode == MeasureSpec.UNSPECIFIED) {
System.out.println("unspecified");
size = 100;
}
return size;
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
this.setMeasuredDimension(this.getWidthSize(widthMeasureSpec), this.getHeightSize(heightMeasureSpec));
}
模板说明:
父 match_parent match_parent match_parent wrap_content wrap_content wrap_content 200px 200px 200px
子 match_parent 100px wrap_content match_parent 100px wrap_content 100px match_parent wrap_content
结果 exactly(fill) exactly(100px) at_most(fill) at_most (fill) exactly(100xp) at_most(fill) exactly(100px) exactly(200px) at_most(200xp)
会执行哪种模式,由这个表来决定
MeasureSpec.EXACTLY:父视图希望子视图的大小应该是specSize中指定的。
MeasureSpec.AT_MOST:子视图的大小最多是specSize中指定的值,也就是说不建议子视图的大小超过specSize中给定的值。
MeasureSpec.UNSPECIFIED:我们可以随意指定视图的大小。