Jaki jest prawidłowy sposób przesłaniania onMeasure ()? Widziałem różne podejścia. Na przykład Professional Android Development używa MeasureSpec do obliczenia wymiarów, a następnie kończy się wywołaniem metody setMeasuredDimension (). Na przykład:
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec){
int parentWidth = MeasureSpec.getSize(widthMeasureSpec);
int parentHeight = MeasureSpec.getSize(heightMeasureSpec);
this.setMeasuredDimension(parentWidth/2, parentHeight);
}
Z drugiej strony, zgodnie z tym postem , „poprawnym” sposobem jest użycie MeasureSpec, wywołanie setMeasuredDimensions (), a następnie wywołanie setLayoutParams () i zakończenie wywołaniem super.onMeasure (). Na przykład:
@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);
}
Więc jaka jest właściwa droga? Żadne z tych podejść nie zadziałało dla mnie w 100%.
Myślę, że naprawdę pytam, czy ktoś zna samouczek, który wyjaśnia onMeasure (), układ, wymiary widoków potomnych itp.?