Android 获得view的宽和高


在oncreate()中利用view.getWidth()或是view.getHeiht()来获取view的宽和高,看似没有问题,其实他们去得值是0,并不是你想要的结果?

这是为什么呢?

在调用oncreate()方法时,界面处于不可见状态,内存加载组件还没有绘制出来,你是无法获取他的尺寸。

那如何在绘制组件之前能获取到该组件的尺寸大小呢?

这里有三种方法,经过验证的:

 

方法一 :

//测量方法

intwidth =View.MeasureSpec.makeMeasureSpec(0,View.MeasureSpec.UNSPECIFIED);
intheight =View.MeasureSpec.makeMeasureSpec(0,View.MeasureSpec.UNSPECIFIED);
view.measure(width,height);
intheight=view.getMeasuredHeight(); 
intwidth=view.getMeasuredWidth();


方法二 :

//增加组件绘制之前的监听
ViewTreeObserver vto =view.getViewTreeObserver(); 
vto.addOnPreDrawListener(newViewTreeObserver.OnPreDrawListener() { 
@Override
publicbooleanonPreDraw() { 
intheight =view.getMeasuredHeight(); 
intwidth =view.getMeasuredWidth();
  }
});


方法三 : 

//增加整体布局监听
ViewTreeObserver vto = view.getViewTreeObserver();  
vto.addOnGlobalLayoutListener(newOnGlobalLayoutListener(){ 
@Override 
publicvoidonGlobalLayout() { 
view.getViewTreeObserver().removeGlobalOnLayoutListener(this);     
intheight =view.getMeasuredHeight(); 
intwidth =view.getMeasuredWidth();  
} 
});