Часто бывает такая ситуация: мы используем ConstraintLayout и там есть какой-то ряд элементов и под ним еще один элемент. И встаёт вопрос, а на что именно завязываться в layout_constraintTop_toBottomOf, если сверху у нас несколько элементов? Хорошо, если они никогда не исчезают и можно выбрать любой. А если всё-таки исчезают? Тогда может возникнуть ситуация как на видео:
Тут у нас кнопка 4 зависит от кнопки 1. И когда кнопка 1 исчезает, то кнопка 4 странно себя ведёт.
Обычное решение — обернуть верхние кнопки в LinearLayout и тогда мы в layout_constraintTop_toBottomOf напишем id обертки и всё будет ок. Но это значительно усложняет вёрстку. Чем больше у нас layout в xml, тем медленнее всё будет отрисовываться и работать.
В ConstraintLayout есть отличное решение: Barrier.
В app:constraint_referenced_ids указываем id всех элементов, на которые должен завязываться барьер. И в app:barrierDirection указываем направление, где у нас будет сам барьер. Я указала bottom: это значит, что барьер будет под кнопками.
Всё, осталось просто указать id барьера в layout_constraintTop_toBottomOf для нашей кнопки.
Результат:
Весь код находится здесь: https://github.com/Ladgertha/TestApplication
Дубль статей в телеграмме — https://t.me/android_junior
Мои заметки в телеграмме — https://t.me/android_junior_notes