Flexboxlayout – Часть 1

  • Часть 1
  • Часть 2 В мае 2016 года в официальном репозитории Google на Github появился новый проект —
flexbox-макет .

Это менеджер макетов для Android, который предоставляет функциональность, аналогичную Гибкая коробка CSS .

В этой серии статей мы рассмотрим FlexboxLayout и попытайтесь понять, как это работает и как лучше всего его использовать.

Мы рассмотрим влияние атрибутов XML на структуру и поведение вложенных представлений.

Чтобы было проще разобраться, я опубликовал в Google Play приложение, позволяющее экспериментировать с разными вариантами.

Со временем выложу исходники этого приложения, а пока предлагаю скачать его и поиграться с настройками.

Также хочу отметить, что в этих статьях я буду рассматривать все действия с точки зрения разработки под Android, т.е.

буду использовать стандартные раскладки Android и отмечать, где FlexboxLayout позволяет получить аналогичный результат. Сначала добавьте зависимость в файл build.gradle:

   

dependencies { compile 'com.google.android:flexbox:0.1.2' }

И теперь мы можем просто использовать FlexboxLayout в XML (или в коде, если необходимо).

Я не буду останавливаться на этом более подробно; примеров в репозитории более чем достаточно.

В общих чертах, FlexboxLayout ближайший к Линейный макет : дочерние элементы располагаются последовательно, один за другим.

С использованием Линейный макет мы указываем ориентацию и это подводит нас к первому атрибуту FlexboxLayout , который мы сейчас рассмотрим:

flexDirection

Этот атрибут управляет направлением дочерних элементов и, как уже упоминалось, работает аналогично атрибуту ориентация Для Линейный макет .

Ценности ряд И столбец аналогично горизонтальной и вертикальной ориентации.

Однако здесь есть еще 2 возможных значения: row_reverse И columns_reverse — делают то же самое, только расставляют дочерние элементы в обратном порядке.



FlexboxLayout – часть 1

flexDirection="строка"

FlexboxLayout – часть 1

flexDirection="row_reverse" Здесь нужно остановиться и ввести пару терминов: главная ось — это направление макета, указанное в атрибуте.

flexDirection ; и поперечная ось, перпендикулярная этому направлению.

Для ряд И row_reverse Основной осью будет горизонтальная ось, а поперечной — вертикальная.

Запомните эти определения, они нам понадобятся позже.



flexWrap

Первое важное различие между FlexboxLayout И Линейный макет — поведение, когда дочерние элементы достигают границы контейнера (т.е.

не помещаются в контейнер).

В случае использования Линейный макет дочерние элементы просто обрезаются так, что, достигнув границы, они оказываются за пределами контейнера.

С использованием FlexboxLayout , мы можем контролировать это поведение, используя атрибут flexWrap .

Установив для него значение сейчасрап , мы заставляем все предыдущие элементы сжиматься, чтобы освободить место для нового элемента.

Здесь есть возможность более тонкой настройки; мы рассмотрим это в будущих статьях, когда будем анализировать атрибуты дочерних элементов.



FlexboxLayout – часть 1

flexWrap="nowrap"

FlexboxLayout – часть 1

flexWrap="обертка"

FlexboxLayout – часть 1

flexWrap="wrap_reverse"

justifyContent

Расположение элементов вдоль главной оси контролируется атрибутом justifyContent .

На первый взгляд поведение этого атрибута может показаться похожим на поведение атрибута flexDirection , однако flexDirection контролирует порядок элементов, в то время как justifyContent - относительное расположение.

Возможные значения: flex_start , flex_end , центр , пространство_между И пространство_вокруг .



FlexboxLayout – часть 1

justifyContent="flex_start"

FlexboxLayout – часть 1

justifyContent="flex_end"

FlexboxLayout – часть 1

justifyContent="центр"

FlexboxLayout – часть 1

justifyContent="пространство_между"

FlexboxLayout – часть 1

justifyContent="пространство_вокруг"

alignItems

Управляет положением и размером элементов вдоль поперечной оси.

Возможные значения: потягиваться , flex_start , flex_end , центр И базовый уровень .



FlexboxLayout – часть 1

alignItems="flex_start"

FlexboxLayout – часть 1

alignItems="flex_end"

FlexboxLayout – часть 1

alignItems="центр"

FlexboxLayout – часть 1

alignItems="базовая линия"

FlexboxLayout – часть 1

alignItems="растянуть"

alignContent

Здесь все может немного запутаться.

alignContent очень похоже на alignItems , но есть одно небольшое отличие, которое тем не менее сильно влияет на поведение.

Если alignItems контролирует расположение элементов вдоль своей оси, затем alignContent управляет размещением самой оси.

В терминах Android это можно сравнить с ТаблицаРоу И ТаблицаLayout : alignContent ведет себя аналогично применению атрибутов к ТаблицаРоу , А alignItems — это применение атрибутов к дочерним элементам — отдельным ячейкам таблицы.

Возможные значения: потягиваться , flex_start , flex_end , центр , пространство_между И пространство_вокруг .



FlexboxLayout – часть 1

alignContent="flex_start"

FlexboxLayout – часть 1

alignContent="flex_end"

FlexboxLayout – часть 1

alignContent="центр"

FlexboxLayout – часть 1

alignContent="пространство_между"

FlexboxLayout – часть 1

alignContent="пространство_вокруг"

FlexboxLayout – часть 1

alignContent="потягиваться" Лучший способ понять разницу между alignItems И alignContent - это играть с ними.

В моем приложении установлены параметры flexDirection : Ряд , Гибкая пленка : Сворачивать , добавьте несколько ячеек (с помощью кнопки «Добавить»), чтобы они заняли 2 строки, установите alignContent по смыслу потягиваться , чтобы было проще оценить размеры элементов, а затем поиграть со значениями alignItems .

Это очень мощная и гибкая вещь.

Но это еще не все, в следующей статье мы рассмотрим способы управления дочерними элементами по отдельности.

Приложение доступно в Гугл игры , исходный код будет опубликован после завершения серии статей.

В опросе могут участвовать только зарегистрированные пользователи.

Войти , Пожалуйста.

Нужно ли переводить следующие части статьи? 90,55% да 115 9,45% нет Проголосовали 12 127 пользователей.

24 пользователя воздержались.

Теги: #flexbox #разработка для Android #Android #разработка для Android

Вместе с данным постом часто просматривают: