В чем разница между getWidth/Height() и getMeasuredWidth/Height() в Android SDK?
Android Documentation говорит, что для представления есть два размера, измеренные размеры и размеры чертежа. Измеренный размер - это тот, который вычисляется в проходе меры (метод onMeasure), а размеры чертежа - фактический размер экрана. В частности, в документации говорится, что:
Эти значения могут, но не обязательно, отличаться от измеренной ширины и высоты.
Итак, мой вопрос: что может сделать размер чертежа отличным от измеренного измерения? Если метод onMeasure (int, int) учитывает требования к макету (заданные как параметры widthMeasureSpec и heightMeasureSpec, как SDK может решить, что представление должно имеют другой размер чертежа?
Кроме того, как/где в Исходный код Android измеренная ширина/высота используется для вычисления ширины/высоты чертежа? Я попытался заглянуть в Просмотреть исходный код, но я не могу понять, как измеренная ширина/высота используется для вычисления конечной ширины/высоты, Возможно, это имеет какое-то отношение к дополнению, но я не уверен.
Ответы
Ответ 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)
похоже, место, где происходит назначение позиции и размера.