MeasureSpec介紹及使用詳解

2021-06-25 18:02:02 字數 2012 閱讀 7816

乙個measurespec封裝了父布局傳遞給子布局的布局要求,每個measurespec代表了一組寬度和高度的要求。乙個measurespec由大小和模式組成。它有三種模式:unspecified(未指定),父元素部隊自元素施加任何束縛,子元素可以得到任意想要的大小;exactly(完全),父元素決定自元素的確切大小,子元素將被限定在給定的邊界裡而忽略它本身大小;at_most(至多),子元素至多達到指定大小的值。

它常用的三個函式:

1.static int getmode(int measurespec):根據提供的測量值(格式)提取模式(上述三個模式之一)

2.static int getsize(int measurespec):根據提供的測量值(格式)提取大小值(這個大小也就是我們通常所說的大小)

3.static int makemeasurespec(int size,int mode):根據提供的大小值和模式建立乙個測量值(格式)

這個類的使用呢,通常在view元件的onmeasure方法裡面呼叫但也有少數例外,看看幾個例子:

a.首先乙個我們常用到的乙個有用的函式,view.resolvesize(int size,int measurespec)

8421     public

static

int resolvesize(int size, int measurespec)

8436 return result;

8437 }

上面既然要用到measurespec值,那自然表示這個函式通常是在onmeasure方法裡面呼叫的。簡單說一下,這個方法的主要作用就是根據你提供的大小和模式,返回你想要的大小值,這個裡面根據傳入模式的不同來做相應的處理。

再看看measurespec.makemeasurespec方法,實際上這個方法很簡單:

9023         public

static

int makemeasurespec(int size, int mode)

這樣大家不難理解size跟measurespec區別了。看看它的使用吧,listview.measureitem(view child)

2464     private

void measureitem(view child)

2471

2472 int childwidthspec = viewgroup.getchildmeasurespec(mwidthmeasurespec,

2473 mlistpadding.left + mlistpadding.right, p.width);

2474 int lpheight = p.height;

2475 int childheightspec;

2476 if (lpheight > 0) else

2481 child.measure(childwidthspec, childheightspec);

2482 }

measurespec方法通常在viewgroup中用到,它可以根據模式(measurespec裡面的三個)可以調節子元素的大小。

注意,使用exactly和at_most通常是一樣的效果,如果你要區別他們,那麼你就要使用上面的函式view.resolvesize(int size,int measurespec)返回乙個size值,然後使用你的view呼叫setmeasureddimension(int,int)函式。

8406     protected

final

void setmeasureddimension(int measuredwidth, int measuredheight)

然後你呼叫view.getmeasuredwidth,view.getmeasuredheigth 返回的就是上面函式裡的mmeasuredwidth,mmeasuredheight的值。

MeasureSpec介紹及使用詳解

乙個measurespec封裝了父布局傳遞給子布局的布局要求,每個measurespec代表了一組寬度和高度的要求。乙個measurespec由大小和模式組成。它有三種模式 unspecified 未指定 父元素部隊自元素施加任何束縛,子元素可以得到任意想要的大小 exactly 完全 父元素決定自...

MeasureSpec介紹及使用詳解

乙個measurespec封裝了父布局傳遞給子布局的布局要求,每個measurespec代表了一組寬度和高度的要求。乙個measurespec由大小和模式組成。它有三種模式 unspecified 未指定 父元素部隊自元素施加任何束縛,子元素可以得到任意想要的大小 exactly 完全 父元素決定自...

MeasureSpec介紹及使用詳解

乙個measurespec封裝了父布局傳遞給子布局的布局要求,每個measurespec代表了一組寬度和高度的要求。乙個measurespec由大小和模式組成。它有三種模式 unspecified 未指定 父元素部隊自元素施加任何束縛,子元素可以得到任意想要的大小 exactly 完全 父元素決定自...