標籤:android style blog http color 使用
首先,推薦文章,http://blog.csdn.net/hqdoremi/article/details/9980481,http://www.docin.com/p-571954086.html
我理解measure的作用有2個:一個就是調用子view的measure函數,產生他們的高度和寬度,以便在自己的layout階段參考;另一個是為父view提供關於自己的測量的width和height(這個寬度和高度往往和子view的測量高度和寬度有關),以便父view在layout階段參考。
layout的作用就是布局子view的大小位置,這裡可以使用剛才測量出的width和height,也可以不使用(當然,系統內建的布局都是使用的,因為這是推薦的規範做法),這完全取決於你想實現的布局效果(比如我可以知道子view的確定位置,就可以直接調用子view的layout函數定位,根本不用什麼測量值),所以measure產生的mMeasuredWidth和mMeasuredHeight僅僅是參考用的。
把measure和layout分開,更方便重用系統控制項。比如ListView不想使用捲軸,想把內容全部現實出來,就可以簡單地重寫一個onMeaure函數,繼續使用預設的onLayout函數。代碼如下:
public class NoScrollListView extends ListView{ public NoScrollListView(Context context, AttributeSet attrs) { super(context, attrs); } public void onMeasure(int widthMeasureSpec, int heightMeasureSpec){ int mExpandSpec = View.MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2, View.MeasureSpec.AT_MOST); super.onMeasure(widthMeasureSpec, mExpandSpec); }}
這裡的onMeaure,修改了父view對listview的高度說明,改為“最多達到最大整數值”,其實就意味著當父view布局這個listview時,分配的高度,是不受父view高度限制了(感覺listview之所以出現捲軸,是在onMeasure中根據父view的大小來判斷的),所以listview會把內容全部載入到了父view上,沒有了捲軸,當然,超過父view的地方看不見,需要配合scrollview使用。