重寫View的onMeasure方法

  1. @Override  
  2.     protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {  
  3.         // TODO Auto-generated method stub  
  4.         super.onMeasure(widthMeasureSpec, heightMeasureSpec);  
  5.         int width = measureDimension(200, widthMeasureSpec);  
  6.         int height = measureDimension(200, heightMeasureSpec);  
  7.         setMeasuredDimension(width, height);  
  8.     }  
  9.   
  10.     public int measureDimension(int defaultSize, int measureSpec){  
  11.         int result;  
  12.           
  13.         int specMode = MeasureSpec.getMode(measureSpec);  
  14.         int specSize = MeasureSpec.getSize(measureSpec);  
  15.           
  16.         if(specMode == MeasureSpec.EXACTLY){  
  17.             result = specSize;  
  18.         }else{  
  19.             result = defaultSize;   //UNSPECIFIED  
  20.             if(specMode == MeasureSpec.AT_MOST){  
  21.                 result = Math.min(result, specSize);  
  22.             }  
  23.         }  
  24.         return result;  
  25.     }  





MeasureSpec.getMode()方法返回的結果有三種:

  • UNSPECIFIED:父對子的大小沒有任何要求。
  • EXACTLY:  父要求其子的大小指定爲某個確切的值。其子以及其他子孫都需要適應該大小。   
  • AT MOST:父要求其子的大小不能超過某個最大值,其子以及其他子孫的大小都需要小於這個值


發佈了20 篇原創文章 · 獲贊 14 · 訪問量 11萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章