getMeasuredWidth()、getWidth()、LayoutParams.width的区别

一、getMeasuredWidth() 和 getMeasuredHeight()

        以 getMeasuredWidth() 方法为例,源码如图1, 其中mMeasuredWidth 是最近一次调用 measure(width, height) 之后,计算的完整的测量信息。这个值仅应该在 measure 和 layout 期间使用。在 layout 之后应该使用 getWidth() 方法。

图1 getMeasuredWidth()

二、getWidth() 和 getHeight()

        以 getWidth() 为例,源码如下,因此 getWidth() 是在执行 layout 方法时进行赋值的,因此在 onLayout() 中就可以得到 View 的 getWidth() 和 getHeight()

图2 getWidth()

三、LayoutParams 的 width 和 height 

        LayoutParams 的信息是布局里 layout_xxx 设置,因此width 和 height,是这个View想要多宽,多高的信息,可以是MATCH_PARENT = -1, WRAP_CONTENT = -2, 或者精确的值(单位px)

总结:

什么时候可以正确的得到这三种值?

        1、getMeasuredWidth() 和 getMeasuredHeight() 在measure方法调用后可以使用。

        2、getWidth() 和 getHeight() 在layout之后完成后才可以使用。

        3、LayoutParams中的参数是不变的,是 layout_xxx 的值。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。