android 獲取組件尺寸大小

jopen 10年前發布 | 22K 次閱讀 Android Android開發 移動開發

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

這是為什么呢?

在調用oncreate()方法時,界面處于不可見狀態,內存加載組件還沒有繪制出來,你是無法獲取他的尺寸。

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

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

方法一 
//測量方法
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(); 

方法二 
//增加組件繪制之前的監聽
ViewTreeObserver vto =view.getViewTreeObserver(); 
vto.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() { 
   @Override 
    public booleanonPreDraw() { 
       int height =view.getMeasuredHeight(); 
       int width =view.getMeasuredWidth();     
   } 
}); 
方法三 

//增加整體布局監聽
ViewTreeObserver vto = view.getViewTreeObserver();  
vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener(){ 
    @Override  
    public voidonGlobalLayout() { 
      view.getViewTreeObserver().removeGlobalOnLayoutListener(this);      
    int height =view.getMeasuredHeight(); 
     int width =view.getMeasuredWidth();  
    }  
});
那么,在activity進入運行期時,組件的尺寸獲取方法就很簡單了,直接getWidth()和getHeight().
 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!