view在oncreate中獲取高和寬
阿新 • • 發佈:2019-02-15
在oncreate()中利用view.getWidth()或是view.getHeiht()來獲取view的寬和高,看似沒有問題,其實他們去得值是0,並不是你想要的結果?
這是為什麼呢?
在呼叫oncreate()方法時,介面處於不可見狀態,記憶體載入元件還沒有繪製出來,你是無法獲取他的尺寸。
那如何在繪製元件之前能獲取到該元件的尺寸大小呢?
這裡有三種方法,經過驗證的:
方法一 ://測量方法
?
1 2 3 4 5 |
int width
=View.MeasureSpec.makeMeasureSpec( 0 ,View.MeasureSpec.UNSPECIFIED); int height
=View.MeasureSpec.makeMeasureSpec( 0 ,View.MeasureSpec.UNSPECIFIED);
view.measure(width,height);
int height=view.getMeasuredHeight();
int width=view.getMeasuredWidth();
|
方法二 : ?
1 2 3 4 5 6 7 8 9 |
//增加元件繪製之前的監聽
ViewTreeObserver
vto =view.getViewTreeObserver();
vto.addOnPreDrawListener( new ViewTreeObserver.OnPreDrawListener()
{
@Override
public booleanonPreDraw()
{
int height
=view.getMeasuredHeight();
int width
=view.getMeasuredWidth();
}
});
|
?
1 2 3 4 5 6 7 8 9 10 |
//增加整體佈局監聽
ViewTreeObserver
vto = view.getViewTreeObserver();
vto.addOnGlobalLayoutListener( new OnGlobalLayoutListener(){
@Override
public voidonGlobalLayout()
{
view.getViewTreeObserver().removeGlobalOnLayoutListener( this );
int height
=view.getMeasuredHeight();
int width
=view.getMeasuredWidth();
}
});
|