關於MeasureSpec的介紹

轉載自360doc,原文鏈接
http://www.360doc.com/content/14/0122/17/11537979_347154222.shtml

在自定義View和ViewGroup的時候,我們經常會遇到int型的MeasureSpec來表示一個組件的大小,這個變量裏面不僅有組件的尺寸大小,還有大小的模式。

這個大小的模式,有點難以理解。在系統中組件的大小模式有三種:

1.精確模式
在這種模式下,尺寸的值是多少,那麼這個組件的長或寬就是多少。

2.最大模式
這個也就是父組件,能夠給出的最大的空間,當前組件的長或寬最大隻能爲這麼大,當然也可以比這個小。

3.未指定模式
這個就是說,當前組件,可以隨便用空間,不受限制。

可能有很多人想不通,一個int型整數怎麼可以表示兩個東西(大小模式和大小的值),一個int類型我們知道有32位。而模式有三種,要表示三種狀態,至少得2位二進制位。於是系統採用了最高的2位表示模式。如圖這裏寫圖片描述
最高兩位是00的時候表示”未指定模式”。即MeasureSpec.UNSPECIFIED
最高兩位是01的時候表示”’精確模式”。即MeasureSpec.EXACTLY
最高兩位是11的時候表示”最大模式”。即MeasureSpec.AT_MOST

很多人一遇到位操作頭就大了,爲了操作簡便,於是系統給我提供了一個MeasureSpec工具類。
這個工具類有四個方法和三個常量(上面所示)供我們使用:

//這個是得到這個變量中表示的模式信息,將得到的值與三個常量進行比較。
public static int getMode(int measureSpec)

//這個是得到這個變量中表示的尺寸大小的值。
public static int getSize(int measureSpec)

//把這個變量裏面的模式和大小組成字符串返回來,方便打日誌
public static String toString(int measureSpec)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章