在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() 区别同理
--------------------------------------------------华丽的分割线-------------------------------------------------- 大家可以去看看View的绘制过程,自习了解下View是如何画出来的
|