Привет!
В этом видео мы познакомимся с конкретными реализациями класса ViewGroup.
Напомню, что ViewGroup используется как контейнеры для обычных View-элементов,
и реализации ViewGroup отличаются друг от друга способами расположениями этих
элементов.
И начнем мы, пожалуй, с LinearLayout.
LinearLayout — это самый простой для восприятия ViewGroup.
Он располагает свои дочерние элементы друг за другом в одном направлении: вертикально
либо горизонтально.
Направление задается с помощью атрибута orientation.
Также LinearLayout имеет одну интересную возможность — он умеет распределять
незанятое пространство между своими дочерними элементами.
Делается это с помощью атрибута layout_weight,
который принимает любое численное значение.
Чем больше это значение,
тем больше пространства будет отведено под View в относительном смысле.
Рассмотрим пример.
На скриншоте изображен корневой LinearLayout с вертикальной ориентацией.
В нем находится пара кнопок и вложенный горизонтальный Linear Layout, в котором,
соответственно, еще две кнопки.
Веса этих кнопок указаны в числителях в названии, в знаменателе, соответственно,
значения weightSum горизонтального LinearLayout.
Так как сумма числителя не равна знаменателю,
LinearLayout оставляет пустое место, размером с остаток.
Атрибут layout_width в этом случае распространяется только на ширину кнопок,
поэтому в целях производительности Studio подсказывает нам установит ширину
кнопок 0dp.
LinearLayout хорошо справляется с одной задачей — располагать элементы друг
за другом.
Однако при более разветвленном дизайне интерфейса верстка через
LinearLayout может стать болью из-за большого количества вложенных контейнеров.
Чтобы избежать этого, можно воспользоваться RelativeLayout.
RelativeLayout — это ViewGroup, которая позволяет более гибко располагать свои
дочерние элементы с помощью большого списка атрибутов.
Атрибуты указывают на местоположение View относительно Layout и других View.
Их много, и большая часть из них сейчас видна на слайде.
Верстая разметку через вкладку дизайна, очень легко получить интерфейс,
как на скриншоте.
Но бросьте себе вызов: попробуйте сверстать тот же экран,
пользуясь только текстовой вкладкой.
Ладно, перейдем к следующим ViewGroup.
FrameLayout.
FrameLayout — это ViewGroup, обычно используемый как контейнер для одной View,
при добавление этой View происходит программно.
Однако если есть необходимость расположить несколько View друг на друге,
то FrameLayout — вполне подходящий вариант.
При этом нужно учитывать, что Android рисует элементы в том порядке,
в котором они описаны в Layout-файле.
Разметку и скриншот вы можете наблюдать на слайде.
Перейдем к более экзотическим ViewGroup — ConstraintLayout.
ConstraintLayout — это относительно новая реализация ViewGroup, идейный наследник
RelativeLayout, или, как его сейчас называют, RelativeLayout на стероидах.
Для расположения дочерних элементов используют так называемый constraint'ы,
или правила.
Если верстку можно сделать с помощью другого layout'а, то лучше воспользоваться
им, иначе есть вероятность погрязнуть в пучине constraint'ов,
так и не добившись желаемого результата.
Но попробовать и поиграться в дизайн-вкладке с этим layout
все-таки стоит.
GridLayout и TableLayout.
GridLayout и TableLayout — это ViewGroup,
который выстраивают свои дочерние элементы в виде таблицы,
однако они не очень распространены из-за неудобства их использования.
Тот же табличный вид можно получить с помощью других Layout,
плюс в подавляющем большинстве случаев таблицы на экране представляют собой
какие-то однородные элементы и верстаются с помощью реализации AdapterView.
Иначе говоря, верстка захламляется отвлекающими элементами и атрибутами.
Вы можете познакомиться с Table и GridLayout самостоятельно.
Хорошо.
В этом видео мы познакомились с реализациями ViewGroup контейнеров.
Чаще всего в разработке мы будем использовать Linear,
Relative и FrameLayout.
Остальные обязательно попробуйте сами.
В следующем видео мы познакомимся с некоторыми элементами интерфейса.
До скорой встречи!