1. 程式人生 > >Android中View的測量模式

Android中View的測量模式

       Android系統給我們提供了一個設計短小精悍卻功能強大的類——MeasureSpec類,通過它來幫助我們測量View。MeasureSpec是一個32位的int值,其中高2位測量的模式,低30位為測量的大小,在計算中使用位運算的原因是為了提高並優化效率。
測量的模式可以為以下三種:
EXACTLY:即精確值模式,當我們將控制的layout_width或layout_height屬性指定為具體數值時,系統使用的是EXACTLY模式。
AT_MOST:即最大值模式,當控制的layout_width或layout_height屬性指定為wrap_content時,此時控制的尺寸只要不超過父控制元件允許的最大尺寸即可。
UNSPECIFIED

:這個屬性比較奇怪——它不指定其大小測量模式,View想多大就多大,通常情況下在繪製自定義View時才會使用。
View類預設的onMeasure()方法只支援EXACTLY模式,所以如果在自定義控制的時候不重寫onMeasure()方法的話,就只能使用EXACTLY模式,控制可以響應你指定的具體寬高值或match_parent屬性。而如果要自定義View支援wrap_cotent屬性,那麼就必須重寫onMeasure方法來指定wrap_content是的大小。
       我們可以使用MeasureSpec中的getMode(int measureSpec)得到測量模式、getSize(int measureSpec)得到測量大小。