Привет! В этом видео мы познакомимся с конкретными реализациями класса 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. Остальные обязательно попробуйте сами. В следующем видео мы познакомимся с некоторыми элементами интерфейса. До скорой встречи!