【Android】getwidth和getmeasuredwidth的区别以及两者的使用场景
首先,看getWidth()的官方说明:
public final int getWidth ()
Added in API level 1Return the width of the your view.
Returns
- The width of your view, in pixels.
返回view的宽度,说的不详细,再看getWidth源码:
/** * Return the width of the your view. * * @return The width of your view, in pixels. */ @ViewDebug.ExportedProperty(category = "layout") public final int getWidth() { return mRight - mLeft; }
从源码可以看出,getwidth返回的是右边坐标减轻坐标减去左边坐标,这要在布局之后才能确定它们的坐标,也就是说在布局后才能调用getwidth来获取。所以getWidth()获得的宽度是View在设定好布局后整个View的宽度。
而对于getmeasuredwidth,
public final int getMeasuredWidthAndState ()
Added in API level 11Return the full width measurement information for this view as computed by the most recent call to measure(int, int)
. This result is a bit mask as defined byMEASURED_SIZE_MASK
and MEASURED_STATE_TOO_SMALL
. This should be used during measurement and layout calculations only. Use getWidth()
to see how wide a view is after layout.
Returns
- The measured width of this view as a bit mask.
/** * Like {@link #getMeasuredWidthAndState()}, but only returns the * raw width component (that is the result is masked by * {@link #MEASURED_SIZE_MASK}). * * @return The raw measured width of this view. */ public final int getMeasuredWidth() { return mMeasuredWidth & MEASURED_SIZE_MASK; }
return The raw measured width of this view 获得的是原始的测量宽度。所以说getMeasuredWidth()是对View上的内容进行测量后得到的View内容占据的宽度。前提是你必须在父布局的onLayout()方法或者此View的onDraw()方法里调用measure(0,0);(measure中的参数的值你自己可以定义),否则你得到的结果和getWidth()得到的结果是一样的。
两者的使用场合:
getMeasuredWidth:在自定义view重写onLayout时、在我们用layoutinflater动态加载view后想获得view的原始宽度时。
getWidth:一般在view已经布局后呈现出来了,想获取宽度时
更多相关文章
- android 坐标之间距离
- android 布局的动画
- Android开发之如何手写代码进行页面布局
- 【android】模拟点击某个指定坐标作用在View上
- android之自定义ViewGroup和自动换行的布局的实现
- 自定义Android标题栏TitleBar布局
- Android入门:HTML布局中Android程序与JAVASCRIPT的交互
- Android学习笔记(1) Android 布局管理器 之 LinearLayout
- android上滑某个布局固定悬浮