Подтвердить что ты не робот

В чем разница между getWidth/Height() и getMeasuredWidth/Height() в Android SDK?

Android Documentation говорит, что для представления есть два размера, измеренные размеры и размеры чертежа. Измеренный размер - это тот, который вычисляется в проходе меры (метод onMeasure), а размеры чертежа - фактический размер экрана. В частности, в документации говорится, что:

Эти значения могут, но не обязательно, отличаться от измеренной ширины и высоты.

Итак, мой вопрос: что может сделать размер чертежа отличным от измеренного измерения? Если метод onMeasure (int, int) учитывает требования к макету (заданные как параметры widthMeasureSpec и heightMeasureSpec, как SDK может решить, что представление должно имеют другой размер чертежа?

Кроме того, как/где в Исходный код Android измеренная ширина/высота используется для вычисления ширины/высоты чертежа? Я попытался заглянуть в Просмотреть исходный код, но я не могу понять, как измеренная ширина/высота используется для вычисления конечной ширины/высоты, Возможно, это имеет какое-то отношение к дополнению, но я не уверен.

4b9b3361

Ответ 1

Как видно из названия, измеренная ширина/высота используется во время фазы измерения и компоновки.

Позвольте мне привести пример,

Виджет просят измерить себя, виджет говорит, что он хочет быть 200px на 200px. Это измеряется ширина/высота.

Во время фазы компоновки, то есть в методе onLayout. Метод может использовать измеренную ширину/высоту своих дочерних элементов или назначать новую ширину/высоту, вызывая метод макета представления.

позволяет сказать, что метод onLayout вызывает childview.layout(0,0,150,150), теперь ширина/высота представления отличается от измеренной ширины/высоты.

Я бы предложил не использовать метод измеренной ширины/высоты вне onLayout.

.

  • onMeasure → устанавливает измеренную ширину/измеренную толщину
  • onLayout → устанавливает ширину/высоту виджета.

additionallly
public void View.layout(int l, int t, int r, int b)
похоже, место, где происходит назначение позиции и размера.