//------------------------------------------------方法一
int w = View.MeasureSpec.makeMeasureSpec(0,View.MeasureSpec.UNSPECIFIED);
int h = View.MeasureSpec.makeMeasureSpec(0,View.MeasureSpec.UNSPECIFIED);
imageView.measure(w, h);
int height =imageView.getMeasuredHeight();
int width =imageView.getMeasuredWidth();
textView.append("n"+height+","+width);
//-----------------------------------------------方法二
ViewTreeObserver vto = imageView.getViewTreeObserver();
vto.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
public boolean onPreDraw() {
int height = imageView.getMeasuredHeight();
int width = imageView.getMeasuredWidth();
textView.append("n"+height+","+width);
return true;
}
});
//-----------------------------------------------方法三
ViewTreeObserver vto2 = imageView.getViewTreeObserver();
vto2.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
imageView.getViewTreeObserver().removeGlobalOnLayoutListener(this);
textView.append("nn"+imageView.getHeight()+","+imageView.getWidth());
}
});
以上三種方法super.onCreate(savedInstanceState);
setContentView(R.layout.main);
之後調用獲取控件大小
方法一: 比其他的兩個方法多了一次計算,也就是多調用了一次onMeasure()方法,該方法雖然看上去簡單,但是如果要目標控件計算耗時比較大的話(如listView等),不建議使用.
方法二,它的回調方法會調用很多次,並且滑動TextView的時候任然會調用,所以不建議使用.
方法三,比較合適.
當然,實際應用的時候需要根據實際情況而定.