自定義View【01】- 對于MeasureSpec的理解

自定義View繪制流程中的onMeasure()方法作用是對父布局進行測量,測量繪制控件所需要的空間大小,最后通過setMeasureDimension()設定繪制的實際大小。

在onMeasure()方法中傳入了widthMeasureSpec和heightMeasureSpec,這兩個參數包含了控件的大小和模式。我們只需要通過調用MeasureSpec的兩個方法就可以獲取到控件的大小和模式。

// 獲取控件的模式
int wMode = MeasureSpec.getMode(widthMeasureSpec);
int hMode = MeasureSpec.getMode(heightMeasureSpec);
// 獲取控件的尺寸
int wSize = MeasureSpec.getSize(widthMeasureSpec);
int hSize = MeasureSpec.getSize(heightMeasureSpec);

其中MeasureSpec.getMode()獲取到的結果一共有三種MeasureSpec.UNSPECIFIED, MeasureSpec.EXACTLY, MeasureSpec.AT_MOST。

  • MeasureSpec.UNSPECIFIED 是未指定尺寸模式,這種情況不多,一般都是父控件是AdapterView,通過measure方法傳入的模式。

  • MeasureSpec.AT_MOST 是最大尺寸模式,當控件的layout_width或layout_height指定為WRAP_CONTENT時,控件大小一般隨著控件的子空間或內容進行變化,此時控件尺寸只要不超過父控件允許的最大尺寸即可。因此,此時的mode是AT_MOST,size給出了父控件允許的最大尺寸。

  • MeasureSpec.EXACTLY 是精確尺寸模式,當我們將控件的layout_width或layout_height指定為具體數值時如andorid:layout_width="50dp",或者為match_parent是,都是控件大小已經確定的情況,都是精確尺寸。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內容