Статья подготовлена для студентов курса «Разработчик Android» в образовательном проекте OTUS.
Представим себе простую ситуацию — нам нужно создать вью, отражающий название компании и её рейтинг, и его мы будем пятьдесят раз использовать в приложении. Например, что-то вроде:
Теперь давайте создадим класс, его описывающий. Допустим, у нас будут два метода: один меняет картинку рейтинга в зависимости от значения, а другой задаёт имя:
Отлично. Теперь давайте запихнём наш вью в лейаут активити:
Запустим приложение и заглянем в Tools > Android > Layout Inspector — посмотрим, что же у нас там такое:
Вот как выглядит наше дерево вью:
Видим, что RatingView, расширяющий LinearLayout, содержит в себе ещё один LinearLayout, а внутри уже наши вьюшки. Теперь, используя <merge>, посмотрим, удастся ли нам исправить ситуацию:
Запустили приложение. Идём в Tools > Android > Layout Inspector.
И, ура!
Мы убрали лишний LinearLayout.
Делаем выводы
Итак, для чего же был создан <merge>? Для оптимизации лейаутов путём уменьшения количества уровней в дереве вью. Когда LayoutInflater встречает этот тег, он пропускает его и добавляет дочерние элементы <merge> к родителю <merge>. Этот тег очень полезный и может использоваться во множестве ситуаций, а также он прекрасно комбинируется с <include>.
Несколько моментов, которые нужно учитывать:
— <merge> всегда должен быть корневым тегом;
— в <merge> нужно обязательно указывать parentTag, как мы сделали в примере выше.
Задать дополнительные вопросы по использованию <merge> всегда можно в комментариях.
Материал подготовлен для студентов курса «Разработчик Android» в образовательном проекте OTUS.
ПРОЙТИ ТЕСТИРОВАНИЕ