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



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




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




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



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

588   1  

1 ответ:

по мере того как имя предлагает measuredWidth/height использовано во время измерять и участка layoutting.

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

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

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

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

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

подведем итог .

  1. onMeasure - > настройка measuredWidth / measuredHeight
  2. onLayout - > настройка ширины / высоты виджета.

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

Comments

    Ничего не найдено.