Для чего нужен метод onLayout у View

«Для чего нужен метод onLayout у View» — вопрос из категории UI и Views, который задают на 23% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Метод 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()