MeasureSpec介紹及使用詳解

2021-06-26 14:32:59 字數 1696 閱讀 9892

乙個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

方法裡面呼叫.

看看它的使用吧,listview.measureitem(view child)

首先乙個我們常用到的乙個有用的函式,

view.resolvesize(int size,int measurespec)

[html]view plain

copy

public static int resolvesize(int size, int measurespec)   

return result;  

}  

9023         public

static

int makemeasurespec(int size, int mode)

[html]view plain

copy

private void measureitem(view child)   

int childwidthspec = viewgroup.getchildmeasurespec(mwidthmeasurespec,  

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

int lpheight = p.height;  

int childheightspec;  

if (lpheight > 0)  else   

child.measure(childwidthspec, childheightspec);  

}  

注意,使用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 完全 父元素決定自...