Использование forceLayout(), requestLayout() и invalidate() в классе View
Может мне кто-то разъяснить как работают эти методы? Когда стоит использовать каждый из них? И в чем принципиальная разница каждого из них?
Ответы (1 шт):
Начнем с inValidate() (доки):
Вызов
invalidate ()выполняется, когда вы хотите запланировать перерисовкуView. Это приведет к тому, чтоonDrawбудет вызываться в конце концов (скоро, но не сразу). Пример того, когда пользовательскоеViewбудет вызывать его, - когда свойство цвета текста или фона изменилось.
Дальше requestLayout() (опять доки):
Если что-то в вашем View изменится, что повлияет на размер, вы должны вызвать
requestLayout (). Это вызовет onMeasure и onLayout не только для этого View , но и до линии родительских View .Вызов
requestLayout ()не гарантированно приведет к onDraw, поэтому он обычно комбинируется сinvalidate().
ForceLayout() (и снова доки)
forceLayout ()работает только с потомком, если он вызывается в сочетании сrequestLayout()у его прямого родителя. ВызовforceLayout ()сам по себе не будет иметь никакого эффекта, так как он не вызываетrequestLayout ()вверх по дереву представления.
Вот еще схематически:
Как android рисуется (доки) Подобные вопросы 1, 2 и интересный ответ. Статья по данной теме.
Обсуждение на гитхабе.
Вероятный первоисточник текстовой информации (я брал инфу не отсюда :) )
Документация по api для view. Надеюсь смог вам помочь данным ответом :)
