Android getWidth和getMeasuredWidth 区别

Google文档的英文说明:

getWidth():

Return the width of the your view.

Returns: the width of your view, in pixels

getMeasuredWidth():

The width of this view as measured in the most recent call to measure(). 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

前提知识点:

1. 在一个类初始化时,即在构造函数当中是得不到View的实际大小的(这个我测试过,的确)。大家可以试试,getWidth()和getMeasuredWidth()得到的结果都是0,但是可以从onDraw()方法或者dispatchDraw()方法里面获得。可以通过调用invalidate()来执行onDraw()和dispatchDraw()方法。

2. 这两个方法所得到的结果的单位是像素即pixel

正确的理解:

getWidth(): View在设定好布局后,整个View的宽度

getMeasuredWidth():对View上的内容进行测量后得到的View内容占据的宽度。前提是你必须在父布局的onLayout()方法或者此View的onDraw()方法里调用measure(0,0);(measure参数的值可以知己定义),否则得到的结果和getWidth()得到的结果是一样的。

这两个方法最主要的区别在于,是否使用了measure()方法,同时measure()使用的位置也很重要。

getHeight() 和 get MeasuredHeight() 区别同理。

装载于:http://blog.sina.com.cn/s/blog_4b93170a0102e2ns.html


说说自己的理解:

如果在Activity的生命周期OnResume以前调用的getWidth()和getMeasuredWidth()这两个方法得到的都是0;在OnPause之后,调用就会得到的实际的数值。

getWidth()得到View在布局好之后View的宽度,getMeasuredWidth()得到是在测量控件时候宽度,这个得到值是一个原始的值,但是,并不准确,一不一定要==getWidth();

如果不调用measure(0,0)(实际的作用是测量该measure的大小) ,getMeasuredWidth()和getWidth()得到的结果是一样的。


// 在Oncreate()方法里面调用下面的代码是不会起作用的

// int iv_height = iv_drag_view.getBottom() - iv_drag_view.getTop();
// int iv_width = iv_drag_view.getRight() - iv_drag_view.getLeft();
// iv_drag_view.layout(lastx, lasty, lastx + iv_width, lasty+iv_height);


RelativeLayout.LayoutParams params = (LayoutParams) iv_drag_view.getLayoutParams();//这段代码会起作用
params.leftMargin = lastx;
params.topMargin = lasty;
iv_drag_view.setLayoutParams(params);





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值