MeasureSpec.getSize(widthMeasureSpec)和getWidth()之间有什么区别?

时间:2017-05-09 10:26:39

标签: android

我知道getWidth()getMeasuredWidth()之间的区别, 但我无法理解MeasureSpec.getSize(widthMeasureSpec)getWidth()之间的区别, MeasureSpec.getSize(widthMeasureSpec)的宽度是多少? THX ~~

2 个答案:

答案 0 :(得分:0)

MeasureSpec.getSize(widthMeasureSpec)返回您要创建的视图的首选宽度或指定的宽度。创建视图后,这可能与getWidth()相同或不同,因为视图可能会根据其他视图的宽度,屏幕方向等更改大小。

答案 1 :(得分:0)

好的,让我们看看。

getMeasuredWidth()返回通过setMeasuredDimension()在onMeasure()中设置的宽度测量。

getWidth()返回视图的最终宽度。父视图可以接受在onMeasure中设置的度量(通过setMeasuredDimension()设置)。在这种情况下,getWidth和getMeasuredWidth将返回相同的值。如果父视图确定您设置的测量值太大或太小,则无法使用,则它将最终宽度设置为更合适的值。在这种情况下,getWidth将具有最终的有效宽度,并且与getMeasuredWidth()不同。始终在onDraw()中使用getWidth()。如果想知道父级是否更改了您先前在onMeasure()中设置的宽度,请仅使用getMeasuredWidth()。

最后要解释 MeasureSpec.getSize(widthMeasureSpec),您需要从官方文档中了解以下内容:

  

如果您需要更好地控制视图的布局参数,   实现onMeasure()。该方法的参数是View.MeasureSpec   告诉您视图的父级希望您的视图有多大的值,   以及该大小是硬性最大值还是仅是建议。作为一个   优化,这些值存储为压缩整数,您可以使用   View.MeasureSpec的静态方法来解压信息   存储在每个整数中。 Custom View Components

您可以从摘要中读取。 WidthMeasureSpec和WeightMeasureSpec不是像素测量。要获取实际像素值,请使用MeasureSpec.getSize():

int width = MeasureSpec.getSize(widthMeasureSpec)

PD:这同样适用于身高

有关更多信息,请在此处查看我的答案(未标记为答案): MeasureSpec returns a 0 value