Ustawianie działania kontenera

Aby skonfigurować zachowanie kontenera FlexBox, utwórz blok FlexBoxConfig i podaj go za pomocą parametru config.

FlexBox(
    config = {
        direction(FlexDirection.Column)
        wrap(FlexWrap.Wrap)
        alignItems(FlexAlignItems.Center)
        alignContent(FlexAlignContent.SpaceAround)
        justifyContent(FlexJustifyContent.Center)
        gap(16.dp)
    }
) { // child items
}

Użyj FlexBoxConfig, aby określić kierunek układu, zachowanie zawijania, wyrównanie i odstępy między elementami.

Kierunek układu

Funkcja direction ustawia oś główną, która określa kierunek układu elementów. Może mieć następujące wartości:

  • Row (domyślna): ustawia oś główną jako poziomą. W językach pisanych od lewej do prawej będzie to od lewej do prawej, a w językach pisanych od prawej do lewej – odwrotnie.
  • RowReverse: odwraca kierunek Row.
  • Column: ustawia oś główną jako pionową, od góry do dołu.
  • ColumnReverse: odwraca kierunek Column.

Wyrównywanie elementów i rozmieszczanie dodatkowego miejsca

W poniższych sekcjach opisano, jak wyrównywać elementy i rozmieszczać dodatkowe miejsce wzdłuż osi głównej i poprzecznej.

Wzdłuż głównej osi

Użyj justifyContent, aby rozmieścić elementy wzdłuż głównej osi. W tabeli poniżej pokazano, jak zachowuje się system, gdy kierunek to Row.

Ilustracja przedstawiająca poziomą oś główną.

Start

Elementy wyrównane do początku osi głównej.

Center

Elementy są wyrównane do środka osi głównej.

End

Elementy wyrównane do końca osi głównej.

SpaceBetween

Elementy są rozmieszczone wzdłuż głównej osi z odstępami między nimi.

SpaceAround

Elementy są rozmieszczone wzdłuż głównej osi z odstępami wokół nich.

SpaceEvenly

Elementy są rozmieszczone wzdłuż głównej osi, a wokół nich są równe odstępy.

Wzdłuż osi poprzecznej

Użyj właściwości alignItems, aby wyrównać elementy wzdłuż osi poprzecznej w jednym wierszu. To zachowanie można zastąpić w przypadku poszczególnych elementów za pomocą modyfikatora alignSelf.

Te obrazy pokazują, co się dzieje, gdy kierunek to Row:

Ilustracja przedstawiająca pionową oś poprzeczną. Elementy wyrównane do początku osi poprzecznej. Elementy wyrównane do końca osi poprzecznej. Elementy wyrównane do środka osi poprzecznej. Elementy są rozciągnięte, aby wypełnić oś poprzeczną. Elementy wyrównane do linii bazowej wzdłuż osi poprzecznej.

Start

End

Center

Stretch

Baseline

Użyj alignContent, aby wyrównać linie do osi poprzecznej i rozłożyć dodatkowe miejsce między liniami. Ta właściwość ma zastosowanie tylko wtedy, gdy jest wiele wierszy (zawijanie jest włączone). Te obrazy pokazują, jak zachowuje się interfejs, gdy kierunek to Row:

Ilustracja przedstawiająca pionową oś poprzeczną. Wiele wierszy elementów wyrównanych do początku osi poprzecznej. Wiele wierszy elementów wyrównanych do końca osi poprzecznej. Wiele wierszy elementów wyrównanych do środka osi poprzecznej. Wiele wierszy elementów rozciągniętych, aby wypełnić oś poprzeczną. Wiele wierszy elementów rozmieszczonych wzdłuż osi poprzecznej z odstępami między nimi. Wiele wierszy elementów rozmieszczonych wzdłuż osi poprzecznej z odstępami wokół nich.

Start

End

Center

Stretch

SpaceBetween

SpaceAround

Zapakuj elementy

Zawijanie umożliwia kontenerowi FlexBox wyświetlanie wielu wierszy i przenoszenie elementów, które nie mieszczą się w nowym wierszu lub kolumnie, wzdłuż osi poprzecznej. Skonfiguruj zachowanie zawijania za pomocą wrap.

Wartość FlexWrap

Przykład użycia kierunku Row

NoWrap (domyślna): uniemożliwia zawijanie elementów. Elementy przepełniają się, jeśli główny rozmiar jest niewystarczający.

Elementy w jednym wierszu przepełniają kontener, ponieważ zawijanie jest wyłączone.

Wrap: gdy nie ma wystarczającej ilości miejsca na element (oraz odstęp), tworzony jest nowy wiersz w kierunku osi poprzecznej. Jeśli na przykład kierunek to Row, nowy wiersz zostanie dodany poniżej.

Elementy zawijane do nowego wiersza poniżej, ponieważ zawijanie jest włączone.

WrapReverse: tak samo jak Wrap, ale nowy wiersz jest dodawany w kierunku przeciwnym do osi poprzecznej. Jeśli na przykład kierunek to Row, nowy wiersz zostanie dodany powyżej.

Elementy zawijane do nowego wiersza powyżej, ponieważ włączone jest zawijanie odwrotne.

Poniższy przykład pokazuje, jak działa algorytm zawijania FlexBox. Kontener FlexBox ma główny rozmiar 100dp, właściwość wrap ustawioną na FlexWrap.Wrap i odstęp 8dp. Zawiera 3 elementy z odpowiednio basis 20dp, 40dp i 50dp.

W wierszu jest dostępne miejsce na 100dp znak. Dziecko 1 to 20dp. Jest miejsce, więc dziecko 1 zostaje umieszczone w kolejce.

Pierwszy element umieszczony w kontenerze Flexbox.
Rysunek 1. Pierwszy element umieszczony w kontenerze FlexBox.

W wierszu jest dostępne miejsce na 80dp znak. Różnica wynosi 8dp. Dziecko 2 ma 40dp lat. Wymagana ilość miejsca to 48dp. Jest miejsce, więc odstęp i element podrzędny 2 są umieszczane w wierszu.

Drugi element umieszczony w kontenerze Flexbox po pierwszym elemencie.
Rysunek 2. Drugi element umieszczony w kontenerze FlexBox po pierwszym elemencie.

W wierszu jest 32dp wolnego miejsca. Różnica wynosi 8dp. Dziecko 3 ma 50dp lat. Wymagana ilość miejsca to 58dp. W bieżącym wierszu nie ma wystarczająco dużo miejsca, więc element podrzędny 3 jest umieszczany w nowym wierszu.

Trzeci element został umieszczony w nowym wierszu, ponieważ nie mieści się w pierwszym.
Rysunek 3. Trzeci element został umieszczony w nowym wierszu, ponieważ nie mieści się w pierwszym.

Dodawanie odstępów między elementami

Dodaj odstępy między wierszami i kolumnami za pomocą właściwości rowGap i columnGap. Jest to przydatne, aby uniknąć dodawania modyfikatorów odstępów do elementów podrzędnych.

Odstęp między wierszami dodaje pionową przestrzeń między elementami. Odstęp między kolumnami dodaje poziome odstępy między elementami. Odstęp dodaje przestrzeń między elementami zarówno w poziomie, jak i w pionie.

rowGap

dodaje odstęp w pionie między elementami i wierszami.

columnGap

dodaje poziome odstępy między elementami i wierszami.

gap to funkcja o uproszczonym zapisie, która dodaje zarówno columnGap, jak i rowGap.