Найти в Дзене

Как использовать <merge> для оптимизации лейаутов?

Статья подготовлена для студентов курса «Разработчик Android» в образовательном проекте OTUS.

Представим себе простую ситуацию — нам нужно создать вью, отражающий название компании и её рейтинг, и его мы будем пятьдесят раз использовать в приложении. Например, что-то вроде:

-2

Теперь давайте создадим класс, его описывающий. Допустим, у нас будут два метода: один меняет картинку рейтинга в зависимости от значения, а другой задаёт имя:

-3

Отлично. Теперь давайте запихнём наш вью в лейаут активити:

-4

Запустим приложение и заглянем в Tools > Android > Layout Inspector — посмотрим, что же у нас там такое:

-5

Вот как выглядит наше дерево вью:

-6

Видим, что RatingView, расширяющий LinearLayout, содержит в себе ещё один LinearLayout, а внутри уже наши вьюшки. Теперь, используя <merge>, посмотрим, удастся ли нам исправить ситуацию:

-7

Запустили приложение. Идём в Tools > Android > Layout Inspector.

И, ура!

-8

Мы убрали лишний LinearLayout.

Делаем выводы

Итак, для чего же был создан <merge>? Для оптимизации лейаутов путём уменьшения количества уровней в дереве вью. Когда LayoutInflater встречает этот тег, он пропускает его и добавляет дочерние элементы <merge> к родителю <merge>. Этот тег очень полезный и может использоваться во множестве ситуаций, а также он прекрасно комбинируется с <include>.

Несколько моментов, которые нужно учитывать:

— <merge> всегда должен быть корневым тегом;

— в <merge> нужно обязательно указывать parentTag, как мы сделали в примере выше.

Задать дополнительные вопросы по использованию <merge> всегда можно в комментариях.

Материал подготовлен для студентов курса «Разработчик Android» в образовательном проекте OTUS.

ПРОЙТИ ТЕСТИРОВАНИЕ