在一套逻辑中,程序给系统下达绘制View的请求之后,如果我们想在此时获得View的宽高,就必须用getMeasuredHeight()。因为此时View还没有绘制完成,不可以使用getHeight()。
这里补充一点知识,View.INVISBLE和View.GONE的区别:View.INVISBLE实际上VIew已经绘制完成,只是看不见,我们仍然可以用getWidth()\getHeight()取得View的宽高。View.GONE时,VIew的状态是未绘制,此时getWidth()\getHeight()返回是0。
举个实际的例子:
现在某个控件et的状态是View.GONE,我们要在某个函数里设置et.setVisibility(View.VISIBLE)之后要获得et的高,那么此时就要用到getMeasuredHeight()。
<span style="white-space:pre"> </span>void function() {
et.setVisibility(View.VISIBLE);
int w = View.MeasureSpec.makeMeasureSpec(0,View.MeasureSpec.UNSPECIFIED);
int h = View.MeasureSpec.makeMeasureSpec(0,View.MeasureSpec.UNSPECIFIED);
tv3.measure(w, h);
Log.v("test", "" + et.getMeasuredHeight());
}