В какой момент происходит расчет размеров у View

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

Ответ

Расчет размеров View происходит в два этапа: measure и layout.

  1. Measure (onMeasure()):

    • Определяет желаемые размеры View и ее дочерних элементов.
    • Родитель передает ограничения (MeasureSpec), а View вычисляет свои размеры внутри них.
  2. Layout (onLayout()):

    • Размещает View и ее дочерние элементы на основе измеренных размеров.

Пример переопределения onMeasure():

override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) {
    val desiredWidth = 200
    val desiredHeight = 100

    setMeasuredDimension(
        resolveSize(desiredWidth, widthMeasureSpec),
        resolveSize(desiredHeight, heightMeasureSpec)
    )
}

Вызовы происходят во время прохода ViewRootImpl при изменении иерархии или запросе requestLayout().