Ответ
Метод onLayout() вызывается, когда родительский контейнер размещает дочерние View, определяя их положение и размеры. В отличие от onMeasure(), который вычисляет размеры, onLayout() отвечает за фактическое расположение.
Переопределяется в кастомных ViewGroup для размещения дочерних элементов. Например:
override fun onLayout(changed: Boolean, l: Int, t: Int, r: Int, b: Int) {
for (i in 0 until childCount) {
val child = getChildAt(i)
child.layout(left, top, left + width, top + height)
}
}
Ключевые моменты:
- Вызывается после
onMeasure() - Определяет final position (left, top, right, bottom)
- Обязателен для кастомных ViewGroup
- Не вызывается напрямую — используйте
requestLayout()