1. 程式人生 > >view在oncreate中獲取高和寬

view在oncreate中獲取高和寬

在oncreate()中利用view.getWidth()或是view.getHeiht()來獲取view的寬和高,看似沒有問題,其實他們去得值是0,並不是你想要的結果?

這是為什麼呢?

在呼叫oncreate()方法時,介面處於不可見狀態,記憶體載入元件還沒有繪製出來,你是無法獲取他的尺寸。

那如何在繪製元件之前能獲取到該元件的尺寸大小呢?

這裡有三種方法,經過驗證的:

方法一 
//測量方法
?
1 2 3 4 5 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();

方法二  ?
1 2 3 4 5 6 7 8 9 //增加元件繪製之前的監聽 ViewTreeObserver vto =view.getViewTreeObserver(); vto.addOnPreDrawListener(
newViewTreeObserver.OnPreDrawListener() { @Override publicbooleanonPreDraw() { intheight =view.getMeasuredHeight(); intwidth =view.getMeasuredWidth();     } });
方法三 : 
?
1 2 3 4 5 6 7 8 9 10 //增加整體佈局監聽 ViewTreeObserver vto = view.getViewTreeObserver();  vto.addOnGlobalLayoutListener(
newOnGlobalLayoutListener(){ @Override  publicvoidonGlobalLayout() { view.getViewTreeObserver().removeGlobalOnLayoutListener(this);      intheight =view.getMeasuredHeight(); intwidth =view.getMeasuredWidth();  });
那麼,在activity進入執行期時,元件的尺寸獲取方法就很簡單了,直接getWidth()和getHeight().