В документации Android говорится, что существует два размера вида: измеренные размеры и размеры чертежа . Измеряемый размер - это размер, вычисленный на этапе измерения ( метод onMeasure ), а размеры чертежа - это фактический размер на экране. В частности, в документации сказано, что:
Эти значения могут, но не обязательно, отличаться от измеренных ширины и высоты.
Итак, мой вопрос: что может сделать размер чертежа отличным от измеренного? Если метод onMeasure (int, int) соблюдает требования к макету (заданные параметрами widthMeasureSpec и heightMeasureSpec , как SDK может решить , что представление должно иметь другой размер рисунка?)
Кроме того, как / где в исходном коде Android измеренная ширина / высота используется для вычисления ширины / высоты чертежа? Я попытался заглянуть в исходный код View , но не могу понять, как измеренная ширина / высота используется для вычисления окончательной ширины / высоты. Возможно, это как-то связано с обивкой, но я не уверен.
источник
Ответы:
Как следует из названия, измеренная ширина / высота используется на этапе измерения и компоновки.
Приведу пример,
Виджету предлагается измерить себя. Виджет сообщает, что он хочет быть размером 200 на 200 пикселей. Это измеренная ширина / высота.
На этапе макета, то есть в методе onLayout. Метод может использовать измеренную ширину / высоту своих дочерних элементов или назначить новую ширину / высоту, вызвав метод макета представления.
Допустим, метод onLayout вызывает childview.layout (0,0,150,150), теперь ширина / высота представления отличается от измеренной ширины / высоты.
Я бы посоветовал не использовать измеренную ширину / высоту вне метода onLayout.
обобщить .
Кроме того,
public void View.layout(int l, int t, int r, int b)
кажется, что это место, где происходит присвоение позиции и размера.
источник