Ответ
В процессе измерения (onMeasure) ViewGroup может вызывать measure() для дочерних View несколько раз, но обычно не более 2 раз:
- Первый проход - измерение без ограничений для определения желаемого размера
- Второй проход - точное измерение с учетом реальных ограничений родителя
Пример:
override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) {
// Первый measure
child.measure(unspecifiedSpec, unspecifiedSpec)
// Второй measure с реальными размерами
child.measure(realWidthSpec, realHeightSpec)
setMeasuredDimension(...)
}
Однако в сложных случаях (например, при использовании weight в LinearLayout) может быть больше измерений. Избегайте более 2 измерений для оптимизации производительности.