Используйте Modifier.flex для управления изменением размера, порядка и выравнивания элемента внутри FlexBox .
Размер изделия
Используйте свойства basis, grow и shrink для управления размером элемента.
FlexBox { RedRoundedBox( modifier = Modifier.flex { basis = FlexBasis.Auto grow = 1.0f shrink = 0.5f } ) }
Установить начальный размер
Используйте basis для указания начального размера предмета до распределения дополнительного пространства. Это можно рассматривать как предпочтительный размер предмета.
Тип значения | Поведение | Фрагмент кода Примечание: максимальный внутренний размер ячеек составляет | Пример использования контейнера шириной |
(по умолчанию) | Используйте максимальный внутренний размер объекта. Например, максимальная внутренняя ширина составного элемента | FlexBox { RedRoundedBox( Modifier.flex { basis = FlexBasis.Auto } ) BlueRoundedBox( Modifier.flex { basis = FlexBasis.Auto } ) } | ![]() |
Фиксированный | Фиксированный размер в Dp. | FlexBox { RedRoundedBox( Modifier.flex { basis(200.dp) } ) BlueRoundedBox( Modifier.flex { basis(100.dp) } ) } | ![]() |
Процент | Процент от размера контейнера. | FlexBox { RedRoundedBox( Modifier.flex { basis(0.7f) } ) BlueRoundedBox( Modifier.flex { basis(0.3f) } ) } | ![]() |
Если значение basis меньше минимального размера элемента, используется его собственный минимальный размер. Например, если для отображения Text элемента, содержащего слово, требуется 50dp , но при этом basis = 10.dp , используется значение 50dp .
Выращивайте растения, когда есть место.
Используйте grow , чтобы указать, насколько увеличится размер элемента при наличии дополнительного пространства. Это пространство, оставшееся в контейнере FlexBox после суммирования basis значений всех элементов. Значение grow указывает, сколько дополнительного пространства получит данный дочерний элемент относительно своих соседей. По умолчанию элементы не увеличиваются в размере.
В следующем примере показан FlexBox с тремя дочерними элементами. Каждый из них имеет базовое значение 100dp . Первый дочерний элемент имеет положительное значение параметра grow . Поскольку значение grow есть только у одного дочернего элемента, фактическое значение не имеет значения — пока оно положительное, дочерний элемент получает все дополнительное пространство.
На изображениях показано поведение FlexBox при размере контейнера 600dp .
FlexBox { RedRoundedBox( title = "400dp", modifier = Modifier.flex { grow = 1f } ) BlueRoundedBox(title = "100dp") GreenRoundedBox(title = "100dp") } | Каждый ребенок имеет базовое значение ![]() Первый ребёнок подрос на ![]() |
В следующем примере размер контейнера и basis размер одинаковы. Разница заключается в том, что у каждого дочернего элемента разное значение grow .
FlexBox { RedRoundedBox( title = "150dp", modifier = Modifier.flex { grow = 1f } ) BlueRoundedBox( title = "200dp", modifier = Modifier.flex { grow = 2f } ) GreenRoundedBox( title = "250dp", modifier = Modifier.flex { grow = 3f } ) } | Каждый ребенок имеет базовое значение ![]() Общая стоимость урожая составляет 6. Ребенок 1 вырос на (1 / 6) * 300 = Второй ребёнок вырос на (2 / 6) * 300 = Ребенок 3 вырос на (3 / 6) * 300 = ![]() |
Уменьшайте размеры предметов, если места недостаточно.
Используйте shrink , чтобы указать, насколько уменьшится размер элемента, если в контейнере FlexBox недостаточно места для всех элементов. shrink работает так же, как и grow , за исключением того, что вместо распределения дополнительного пространства между элементами, дефицит пространства распределяется между элементами. Значение shrink указывает, какую часть дефицита пространства получает элемент, или, точнее, насколько он уменьшится. По умолчанию элементы имеют значение shrink равное 1f , что означает, что они уменьшаются одинаково.
В следующем примере показаны два Text элемента, содержащие один и тот же текст. Первый дочерний элемент имеет значение shrink равное 1f , что означает, что он сжимается, чтобы компенсировать весь дефицит пространства.
FlexBox { Text( "The quick brown fox", fontSize = 36.sp, modifier = Modifier .background(PastelRed) .flex { shrink = 1f } ) Text( "The quick brown fox", fontSize = 36.sp, modifier = Modifier .background(PastelBlue) .flex { shrink = 0f } ) }
По мере уменьшения размера контейнера, Дочерний элемент 1 также уменьшается в размерах.
Размер контейнера | FlexBox UI |
| ![]() |
| ![]() |
| ![]() |
Выравнивание элементов
Используйте alignSelf для управления выравниванием элемента по поперечной оси. Это переопределяет свойство alignItems контейнера для данного элемента. Оно имеет все те же возможные значения, с добавлением значения Auto , которое наследует поведение контейнера FlexBox .
Например, для этого FlexBox параметру alignItems задано значение Start , и у него есть пять дочерних элементов, которые переопределяют выравнивание по поперечной оси.
FlexBox( config = { alignItems = FlexAlignItems.Start } ) { RedRoundedBox() BlueRoundedBox(modifier = Modifier.flex { alignSelf = FlexAlignSelf.Center }) GreenRoundedBox(modifier = Modifier.flex { alignSelf = FlexAlignSelf.End }) PinkRoundedBox(modifier = Modifier.flex { alignSelf = FlexAlignSelf.Stretch }) OrangeRoundedBox(modifier = Modifier.flex { alignSelf = FlexAlignSelf.Baseline }) }

Заказ товара
По умолчанию FlexBox размещает элементы в том порядке, в котором они объявлены в коде. Это поведение можно изменить с помощью order .
Значение по умолчанию для order равно нулю, и FlexBox сортирует элементы по этому значению в порядке возрастания. Все элементы с одинаковым значением order располагаются в том же порядке, в котором они были объявлены. Используйте отрицательные и положительные значения order для перемещения элементов в начало или конец макета без изменения их местоположения.
В следующем примере показаны два дочерних элемента. Первый имеет order по умолчанию, равный нулю, а второй — порядок -1 . После сортировки дочерний элемент 1 появляется после дочернего элемента 2.
FlexBox { // Declared first, but will be placed after visually RedRoundedBox( title = "World" ) // Declared second, but will be placed first visually BlueRoundedBox( title = "Hello", modifier = Modifier.flex { order = -1 } ) }










