自定义控件之测量方法小结

在创建自定义控件的时候我们会用到两个方法getMeasureWidth和getWidth,那么他们有什么区别呢?

1、getMeasuredWidth与getMeasuredHeight方法 测量的是控件内容实际占用的空间大小 调用之前必须先调用测量方法measure(),否则得到的结果是0

//获取view对象 测量其宽和高
View child = getChildAt(i);
child.measure(0, 0);
int cWidth = child.getMeasuredWidth();
int cHeight = child.getMeasuredHeight();
child.measure(0, 0); 实际就是textView.measure(View.MeasureSpec.UNSPECIFIED, View.MeasureSpec.UNSPECIFIED); 表示测量控件,一个控件只有先调用测量方法才能获取到测量值。

如上图所示,getMeasuredWidth与getMeasuredHeight方法获得的结果应该是a和b 但在实际获得的a的值却比a大这是因为在Textview控件中内容只会单行排列,所以造成a的值大于预想值。

2、getWidth与getHeight方法 获取的是控件在布局文件中设置的宽高 他与控件的内容无关即A和B 不过值得注意的是这两个方法必须在控件绘制完毕即onDraw()之后调用

原文地址:https://www.cnblogs.com/yegong0214/p/6289242.html