乙個measurespec封裝了父布局傳遞給子布局的布局要求,每個measurespec代表了一組寬度和高度的要求。乙個measurespec由大小和模式組成。它有三種模式:unspecified(未指定),父元素部隊自元素施加任何束縛,子元素可以得到任意想要的大小;exactly(完全),父元素決定自元素的確切大小,子元素將被限定在給定的邊界裡而忽略它本身大小;at_most(至多),子元素至多達到指定大小的值。
它常用的三個函式:
1.staticint getmode(int measurespec):根據提供的測量值(格式)提取模式(上述三個模式之一)
2.staticint getsize(int measurespec):根據提供的測量值(格式)提取大小值(這個大小也就是我們通常所說的大小)
3.staticint makemeasurespec(int size,int mode):根據提供的大小值和模式建立乙個測量值(格式)
這個類的使用呢,通常在view元件的onmeasure方法裡面呼叫但也有少數例外,看看幾個例子:
a.首先乙個我們常用到的乙個有用的函式,view.resolvesize(intsize,int measurespec)
8421 public上面既然要用到measurespec值,那自然表示這個函式通常是在onmeasure方法裡面呼叫的。簡單說一下,這個方法的主要作用就是根據你提供的大小和模式,返回你想要的大小值,這個裡面根據傳入模式的不同來做相應的處理。static
int resolvesize(int size, int measurespec)
8436 return result;
8437 }
再看看measurespec.makemeasurespec方法,實際上這個方法很簡單:
9023 public這樣大家不難理解size跟measurespec區別了。看看它的使用吧,listview.measureitem(view child)static
int makemeasurespec(int size, int mode)
2464 privatemeasurespec方法通常在viewgroup中用到,它可以根據模式(measurespec裡面的三個)可以調節子元素的大小。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 }
注意,使用exactly和at_most通常是一樣的效果,如果你要區別他們,那麼你就要使用上面的函式view.resolvesize(int size,int measurespec)返回乙個size值,然後使用你的view呼叫setmeasureddimension(int,int)函式。
8406 protected然後你呼叫view.getmeasuredwidth,view.getmeasuredheigth 返回的就是上面函式裡的mmeasuredwidth,mmeasuredheight的值。final
void setmeasureddimension(int measuredwidth, int measuredheight)
MeasureSpec介紹及使用詳解
乙個measurespec封裝了父布局傳遞給子布局的布局要求,每個measurespec代表了一組寬度和高度的要求。乙個measurespec由大小和模式組成。它有三種模式 unspecified 未指定 父元素部隊自元素施加任何束縛,子元素可以得到任意想要的大小 exactly 完全 父元素決定自...
MeasureSpec介紹及使用詳解
乙個measurespec封裝了父布局傳遞給子布局的布局要求,每個measurespec代表了一組寬度和高度的要求。乙個measurespec由大小和模式組成。它有三種模式 unspecified 未指定 父元素部隊自元素施加任何束縛,子元素可以得到任意想要的大小 exactly 完全 父元素決定自...
MeasureSpec介紹及使用詳解
乙個measurespec封裝了父布局傳遞給子布局的布局要求,每個measurespec代表了一組寬度和高度的要求。乙個measurespec由大小和模式組成。它有三種模式 unspecified 未指定 父元素部隊自元素施加任何束縛,子元素可以得到任意想要的大小 exactly 完全 父元素決定自...