Hàm onMeasure

void onMeasure (int widthMeasureSpec, int heightMeasureSpec)

View và nội dung trong nó được xác bới chiều rộng và cao. Hàm onMeasure được gọi bởi hàm measure(int,int), onMeasure có thể được quá tải (overrid) để cung cấp kích thước phù hợp về nội dung của nó. Khi bạn overrided hàm này, bạn bắt buộc phải gọi hàm setMeasuredDimension(int, int) trong hàm quá tải để lưu lại kích thước chiều rộng và cao của View, nếu không làm vậy sẽ dẫn tới lỗi.

Thông thường thì View sẽ được cung cấp một kích thước mặc định sắp đặt trên mành hình bằng kích thước nền, trừ khi một kích thước lớn hơn cho phép bởi MeasureSpe. Khi dùng View bạn có thể quá tải hàm onMeasure này để cho hệ thống biết bạn cần một kích thước cụ thể nào đó nhằm phù hợp với nội dung. Trong hàm quá tải này bạn có thể tham khảo chiều cao và chiều rộng tối thiểu bới hàm getSuggestedMinimumHeight(), getSuggestedMinimumWidth().

Tham số widthMeasureSpec và heightMeasureSpec

  • widthMeasureSpec: kiểu int, chiều ngang yêu cầu để view cha sắp xếp, nó cần giải mã với hàm MeasureSpe
  • heightMeasureSpec: Chứa chiều ngang yêu cầu, cần giải mã với View.MeasureSpec.

Về View.MeasureSpec

Một MeasureSpec bao gồm các yêu cầu về layout được chuyển tử View cha tới View con. Mỗi một MeasureSpec diễn tả hoặc chiều cao hoặc chiều rộng, và nén trong nó gồm kích thước và kiểu (mode). Có ba kiểu mô tả cho MeasureSpec:

  • MeasureSpec.UNSPECIFIED: View cha không có một dàng buộc nào với cửa sổ con. Cửa sổ con tùy thích kích thước mong muốn.
  • MeasureSpec.EXACTLY: View cha đã quyết định chính xác kích thước cho view con, cửa sổ con sẽ nhận được đường biên với độ lớn như mong muốn. 
  • MeasureSpec. AT_MOST: View con có thể tới kích thước được đưa ra thôi.