Как View знает что что-то поменялось

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

Ответ

View определяет изменения через механизм инвалидации (invalidate() и requestLayout()).

  • invalidate() помечает область View как "грязную", что приводит к перерисовке в следующем цикле рендеринга (onDraw). Используется при изменении внешнего вида (цвет, текст и т.д.)
  • requestLayout() запускает полный перерасчет layout, включая measure и layout pass. Используется при изменении размеров или структуры.

Пример:

// Просто перерисовка
textView.text = "New text"
textView.invalidate() 

// Изменение размеров
textView.layoutParams.width = 200
textView.requestLayout()

Система автоматически вызывает эти методы для стандартных свойств View (setText(), setWidth() и т.д.), но при кастомной отрисовке их нужно вызывать вручную.