В чем разница между getWidth/Height() и getMeasuredWidth/Height() в Android SDK?
The Android документация говорит что есть два размера для вида измерить размеры и чертежные размеры. Измеренный размер-это тот, который вычисляется в измерения (the onMeasure метод), в то время как чертежные размеры фактический размер на экране. В частности, в документации говорится, что:
эти значения могут, но не обязательно, отличаться от измеренной ширины и высоты.
Итак, мой вопрос: что может сделать размер чертежа отличаться от измеренного размера? Если onMeasure (int,int) метод учитывает требования к компоновке (заданные в качестве параметров widthMeasureSpec и heightMeasureSpec, как SDK может решить, что вид должен иметь другой размер чертежа?
кроме того, как/где в Android Источник Код измеренная ширина / высота используется для вычисления ширины/высоты чертежа? Я попытался заглянуть в просмотр исходного кода, но я не могу понять, как measuredWidth/Height используется для вычисления конечной ширины/высоты. Может быть, это как-то связано с прокладкой, но я не уверен.
1 ответ:
по мере того как имя предлагает measuredWidth/height использовано во время измерять и участка layoutting.
позвольте мне привести пример,
виджет просят измерить себя, виджет говорит, что он хочет быть 200px на 200px. Это measuredWidth / height.
на этапе компоновки, т. е. в методе onLayout. Метод может использовать measuredWidth / height своих дочерних элементов или назначить новую ширину/высоту, вызвав метод layout представления.
позволяет скажем, метод onLayout вызывает childview.макет (0,0,150,150) теперь ширина/высота вида отличается от измеренной ширины/высоты.
Я бы предложил не использовать метод measuredWidth / height вне onLayout.
подведем итог .
- onMeasure - > настройка measuredWidth / measuredHeight
- onLayout - > настройка ширины / высоты виджета.
additionallly
public void View.layout(int l, int t, int r, int b)
кажется место, где происходит присвоение позиции и размера.
Comments