我知道getWidth()
和getMeasuredWidth()
之间的区别,
但我无法理解MeasureSpec.getSize(widthMeasureSpec)
和getWidth()
之间的区别,
MeasureSpec.getSize(widthMeasureSpec)
的宽度是多少?
THX ~~
答案 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