MeasureSpec介紹及使用詳解

2021-06-20 08:01:52 字數 2429 閱讀 7822

乙個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)1 23

4567

89

1011

1213

1415

1617

publicstaticintresolvesize(intsize,intmeasurespec)

returnresult;

}

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

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

public static int makemeasurespec(int size, int mode)

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

4567

89

1011

1213

1415

1617

1819

privatevoidmeasureitem(view child)

intchildwidthspec = viewgroup.getchildmeasurespec(mwidthmeasurespec,

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

intlpheight = p.height;

intchildheightspec;

if(lpheight >0)else

child.measure(childwidthspec, childheightspec);

}

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

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

45

6protectedfinalvoidsetmeasureddimension(intmeasuredwidth,intmeasuredheight)

MeasureSpec介紹及使用詳解

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

MeasureSpec介紹及使用詳解

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

MeasureSpec介紹及使用詳解

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