Android開發 MeasureSpec介紹

yangxi_001發表於2014-07-30

在自定義ViewViewGroup的時候,我們經常會遇到int型的MeasureSpec來表示一個元件的大小,這個變數裡面不僅有元件的尺寸大小,還有大小的模式。


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


1.精確模式

在這種模式下,尺寸的值是多少,那麼這個元件的長或寬就是多少。


2.最大模式

這個也就是父元件,能夠給出的最大的空間,當前元件的長或寬最大隻能為這麼大,當然也可以比這個小。


3.未指定模式

這個就是說,當前元件,可以隨便用空間,不受限制。


可能有很多人想不通,一個int型整數怎麼可以表示兩個東西(大小模式和大小的值),一個int型別我們知道有32位。而模式有三種,要表示三種狀態,至少得2位二進位制位。於是系統採用了最高的2位表示模式。如圖:


最高兩位是00的時候表示"未指定模式"。即MeasureSpec.UNSPECIFIED

最高兩位是01的時候表示"'精確模式"。即MeasureSpec.EXACTLY

最高兩位是11的時候表示"最大模式"。即MeasureSpec.AT_MOST



很多人一遇到位操作頭就大了,為了操作簡便,於是系統給我提供了一個MeasureSpec工具類。

這個工具類有四個方法和三個常量(上面所示)供我們使用:



//這個是由我們給出的尺寸大小和模式生成一個包含這兩個資訊的int變數,這裡這個模式這個引數,傳三個常量中的一個。

public static int makeMeasureSpec(int size, int mode)



//這個是得到這個變數中表示的模式資訊,將得到的值與三個常量進行比較。

public static int getMode(int measureSpec)



//這個是得到這個變數中表示的尺寸大小的值。

public static int getSize(int measureSpec)



//把這個變數裡面的模式和大小組成字串返回來,方便打日誌

 public static String toString(int measureSpec)

相關文章