Cách chính xác để ghi đè onMeasure () là gì? Tôi đã thấy nhiều cách tiếp cận khác nhau. Ví dụ: Professional Android Development sử dụng MeasureSpec để tính toán các thứ nguyên, sau đó kết thúc bằng lệnh gọi setMeasuredDimension (). Ví dụ:
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec){
int parentWidth = MeasureSpec.getSize(widthMeasureSpec);
int parentHeight = MeasureSpec.getSize(heightMeasureSpec);
this.setMeasuredDimension(parentWidth/2, parentHeight);
}
Mặt khác, theo bài đăng này , cách "đúng" là sử dụng MeasureSpec, gọi setMeasuredDimensions (), tiếp theo là một lệnh gọi setLayoutParams () và kết thúc bằng một lệnh gọi tới super.onMeasure (). Ví dụ:
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec){
int parentWidth = MeasureSpec.getSize(widthMeasureSpec);
int parentHeight = MeasureSpec.getSize(heightMeasureSpec);
this.setMeasuredDimension(parentWidth/2, parentHeight);
this.setLayoutParams(new *ParentLayoutType*.LayoutParams(parentWidth/2,parentHeight));
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
}
Vậy cách nào là đúng? Cả hai cách tiếp cận đều không hiệu quả 100% đối với tôi.
Tôi đoán thực sự những gì tôi đang hỏi là có ai biết hướng dẫn giải thích onMeasure (), bố cục, kích thước của chế độ xem con, v.v. không?