Авторитетный способ переопределения onMeasure ()?

Каков правильный способ переопределения onMeasure ()? Я видел разные подходы. Например, Профессиональная разработка под Android использует 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 (), макет, размеры дочерних представлений и т. Д.?

87
задан Community 23 May 2017 в 12:34
поделиться