android自訂view–應該注意的

來源:互聯網
上載者:User
android的布局分兩個階段,先measure()後requestLayout(), 一個MeasureSpec封裝了父布局傳給子布局的布局要求。每個MeasureSpec代表了一個寬度或高度的要求。一個MeasureSpec包含一個尺寸和模式。MeasureSpec的三種模式: UNSPECIFIED:父布局沒有給子布局任何限制,子布局可以任意大小。EXACTLY:父布局決定子布局的確切大小。不論子布局多大,它都必須限制在這個界限裡。AT_MOST:子布局可以根據自己的大小選擇任意大小。@Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {    int measuredHeight = measureHeight(heightMeasureSpec);    int measuredWidth = measureWidth(widthMeasureSpec);    setMeasuredDimension(measuredHeight, measuredWidth);  //final DisplayMetrics metrics = getResources().getDisplayMetrics(); //setMeasuredDimension(mBitmap.getScaledWidth(metrics),mBitmap.getScaledHeight(metrics));   } private int measureHeight(int measureSpec) {    int specMode = MeasureSpec.getMode(measureSpec);    int specSize = MeasureSpec.getSize(measureSpec);  int result = 500;    if (specMode == MeasureSpec.AT_MOST) {    result = specSize;    }     else if (specMode == MeasureSpec.EXACTLY) { result = specSize;  }  return result;    }         private int measureWidth(int measureSpec) {    int specMode = MeasureSpec.getMode(measureSpec);    int specSize = MeasureSpec.getSize(measureSpec);  int result = 500;    if (specMode == MeasureSpec.AT_MOST)    {  result = specSize;    }     else if (specMode == MeasureSpec.EXACTLY)     {  result = specSize;    }   return result;    }CreationConstructors onFinishInflate()當View和它的所有子物件從XML中匯入之後,調用此方法LayoutonMeasure(int, int)View會調用此方法,來確認自己及所有子物件的大小onLayout(boolean, int, int, int, int, int, int)當View要為所有子物件分配大小和位置時,調用此方法onSizeChanged(int, int, int, int)當View大小改變時,調用此方法DrawingonDraw(Canvas)當View要繪製它的內容時,調用此方法Event processingonKeyDown(int, KeyEvent)當一個新的按鍵事件發生時,調用此方法onKeyUp(int, KeyEvent)當一個按鍵釋放事件發生時,調用此方法onMotionEvent(MotionEvent)當一個動作事件(如觸摸)發生時,調用此方法FocusonFocusChanged(boolean, int)當View獲得或失去焦點時,調用此方法AttachingonAttachedToWindow()當View附加到一個表單上時,調用此方法onDetachedFromWindow()當View離開它的表單時,調用此方法當你為一個 activty 添加一個可見的 view, 並且運行這個activty時,android通常情況下會自動按照下列順序來觸發view的相關事件onAttachedToWindowonMeasureonSizeChangedonLayoutonDraw  
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.