有三种方式获得,但第一种方式和后两种方式获取结果会有区别。
第一种方式
final TextView textView = (TextView) findViewById(R.id.textView);
int w = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED);
int h = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED);
textView.measure(w, h);
int height = textView.getMeasuredHeight();
int width = textView.getMeasuredWidth();
System.out.println("11measure width= " + width + " height=" + height);
这种方式获取的结果跟设置的LayoutWidth和LayoutHeight没有关系,获取的永远是实际占的位置是多少。
第二种方式
ViewTreeObserver vto = textView.getViewTreeObserver();
vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
textView.getViewTreeObserver().removeGlobalOnLayoutListener(this);
int width = textView.getMeasuredWidth();
int height = textView.getMeasuredHeight();
System.out.println("22measure width=" + width + " height=" + height);
}
});
第三种方式
vto.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
public boolean onPreDraw() {
textView.getViewTreeObserver().removeOnPreDrawListener(this);
int width = textView.getMeasuredWidth();
int height = textView.getMeasuredHeight();
System.out.println("33measure width=" + width + " height=" + height);
return true;
}
});