標籤:android style blog io color sp java on div
每個View中都有一個測量繪製控制項大小的方法onMeasure(int widthMeasureSpec, int heightMeasureSpec) ,該方法用於初始化控制項所佔的地區:
摘自SlidingDrawer.java,僅作參考說明onMeasure(int widthMeasureSpec, int heightMeasureSpec)方法
@Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { //onMeasure方法傳入的兩個參數widthMeasureSpec, heightMeasureSpec,其單位為dp或dip int widthSpecMode = MeasureSpec.getMode(widthMeasureSpec); //這裡判斷單位是dp或dip,有或者其他的單位類型 int widthSpecSize = MeasureSpec.getSize(widthMeasureSpec); //將單位轉為px int heightSpecMode = MeasureSpec.getMode(heightMeasureSpec); int heightSpecSize = MeasureSpec.getSize(heightMeasureSpec); if (widthSpecMode == MeasureSpec.UNSPECIFIED || heightSpecMode == MeasureSpec.UNSPECIFIED) { throw new RuntimeException("SlidingDrawer cannot have UNSPECIFIED dimensions"); } // final View handle = mHandle; measureChild(handle, widthMeasureSpec, heightMeasureSpec); if (mVertical) { int height = heightSpecSize - handle.getMeasuredHeight() - mTopOffset; mContent.measure(MeasureSpec.makeMeasureSpec(widthSpecSize, MeasureSpec.EXACTLY), MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY)); } else { int width = widthSpecSize - handle.getMeasuredWidth() - mTopOffset; mContent.measure(MeasureSpec.makeMeasureSpec(width, MeasureSpec.EXACTLY), MeasureSpec.makeMeasureSpec(heightSpecSize, MeasureSpec.EXACTLY)); } //最後繪製父控制項的大小 setMeasuredDimension(widthSpecSize, heightSpecSize); //super.onMeasure(widthMeasureSpec, heightMeasureSpec)原型則是下面這樣寫的: //setMeasuredDimension(getDefaultSize(getSuggestedMinimumWidth(), widthMeasureSpec), // getDefaultSize(getSuggestedMinimumHeight(), heightMeasureSpec)); }
Android onMeasure(widthSpec, heightSpec)