Каков правильный способ переопределения onMeasure()? Я видел разные подходы. Например, Professional Android Development использует MeasureSpec для расчета размеров, а затем заканчивается вызовом setMeasuredDimension(). Например:
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec){
int parentWidth = MeasureSpec.getSize(widthMeasureSpec);
int parentHeight = MeasureSpec.getSize(heightMeasureSpec);
this.setMeasuredDimension(parentWidth/2, parentHeight);
}
С другой стороны, согласно этому сообщению, "правильным" способом является использование MeasureSpec, вызов setMeasuredDimensions(), , за которым следует вызов setLayoutParams() и завершение вызовом super.onMeasure(). Например:
@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);
}
Итак, что это правильный путь? Ни один из подходов не работал у меня на 100%.
Я думаю, действительно, что я спрашиваю, знает ли кто-нибудь из учебника, объясняющего onMeasure(), макет, размеры детских представлений и т.д.?