Containerverhalten festlegen

Wenn Sie das Verhalten des FlexBox-Containers konfigurieren möchten, erstellen Sie einen FlexBoxConfig-Block und geben Sie ihn mit dem Parameter config an.

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

Mit FlexBoxConfig können Sie die Layoutrichtung, das Umbruchverhalten, die Ausrichtung und die Abstände zwischen Elementen definieren.

Layoutrichtung

Mit der Funktion direction wird die Hauptachse festgelegt, die die Richtung bestimmt, in der Elemente angeordnet werden. Es werden die folgenden Werte akzeptiert:

  • Row (Standard): Legt die Hauptachse auf horizontal fest. In Sprachen, die von links nach rechts geschrieben werden, ist die Reihenfolge von links nach rechts. In Sprachen, die von rechts nach links geschrieben werden, ist die Reihenfolge umgekehrt.
  • RowReverse: Kehrt die Richtung von Row um.
  • Column: Legt die Hauptachse auf vertikal (von oben nach unten) fest.
  • ColumnReverse: Kehrt die Richtung von Column um.

Elemente ausrichten und zusätzlichen Leerraum verteilen

In den folgenden Abschnitten wird beschrieben, wie Sie Elemente ausrichten und zusätzlichen Leerraum entlang der Haupt- und Querachse verteilen.

Entlang der Hauptachse

Verwenden Sie justifyContent, um Elemente entlang der Hauptachse zu verteilen. Die folgende Tabelle zeigt das Verhalten, wenn die Richtung Row ist.

Abbildung einer horizontalen Hauptachse.

Start

Elemente, die am Anfang der Hauptachse ausgerichtet sind.

Center

Elemente, die an der Mitte der Hauptachse ausgerichtet sind.

End

Elemente, die am Ende der Hauptachse ausgerichtet sind.

SpaceBetween

Die Elemente sind entlang der Hauptachse verteilt und es gibt Zwischenräume.

SpaceAround

Die Elemente sind entlang der Hauptachse verteilt und haben einen Abstand zueinander.

SpaceEvenly

Die Elemente sind entlang der Hauptachse verteilt und haben gleichmäßig viel Leerraum um sich herum.

Entlang der Querachse

Mit alignItems können Sie Elemente entlang der Querachse in einer einzelnen Zeile ausrichten. Dieses Verhalten kann für einzelne Elemente mit dem Modifikator alignSelf überschrieben werden.

Die folgenden Bilder zeigen das Verhalten, wenn die Richtung Row ist:

Abbildung einer vertikalen Kreuzachse. Elemente, die am Start der Querachse ausgerichtet sind. Elemente, die am Ende der Querachse ausgerichtet sind. Elemente, die an der Mitte der Querachse ausgerichtet sind. Die Elemente werden so gestreckt, dass sie die Querachse ausfüllen. Elemente, die entlang der Querachse an ihrer Baseline ausgerichtet sind.

Start

End

Center

Stretch

Baseline

Mit alignContent können Sie Zeilen an der Querachse ausrichten und zusätzlichen Leerraum zwischen den Zeilen verteilen. Diese Property gilt nur, wenn mehrere Zeilen vorhanden sind (Zeilenumbruch ist aktiviert). Die folgenden Bilder zeigen das Verhalten, wenn die Richtung Row ist:

Abbildung einer vertikalen Kreuzachse. Mehrere Zeilen mit Elementen, die am Start der Querachse ausgerichtet sind. Mehrere Zeilen mit Elementen, die am Ende der Querachse ausgerichtet sind. Mehrere Zeilen mit Elementen, die an der Mitte der Querachse ausgerichtet sind. Mehrere Zeilen mit Elementen, die so gestreckt wurden, dass sie die Querachse ausfüllen. Mehrere Zeilen mit Elementen, die entlang der Querachse verteilt sind und zwischen denen sich Leerräume befinden. Mehrere Zeilen mit Elementen, die entlang der Querachse verteilt sind und um die herum Platz ist.

Start

End

Center

Stretch

SpaceBetween

SpaceAround

Elemente zusammenfassen

Durch Umbruch kann ein FlexBox-Container mehrzeilig werden. Elemente, die nicht passen, werden entlang der Querachse in eine neue Zeile oder Spalte verschoben. Konfigurieren Sie das Umbruchverhalten mit wrap.

FlexWrap-Wert

Beispiel mit der Richtung Row

NoWrap (Standard): Das Umbrechen von Elementen wird verhindert. Elemente werden überlaufen, wenn die Hauptgröße nicht ausreicht.

Elemente in einer einzelnen Zeile, die den Container überlaufen, weil der Zeilenumbruch deaktiviert ist.

Wrap: Wenn nicht genügend Platz für ein Element (plus Abstand) vorhanden ist, wird in Richtung der Querachse eine neue Zeile erstellt. Wenn die Richtung beispielsweise Row ist, wird eine neue Zeile darunter eingefügt.

Elemente werden unten in eine neue Zeile umgebrochen, da der Zeilenumbruch aktiviert ist.

WrapReverse: Wie Wrap, nur dass die neue Zeile in der entgegengesetzten Richtung zur Kreuzachse hinzugefügt wird. Wenn die Richtung beispielsweise Row ist, wird eine neue Zeile darüber eingefügt.

Elemente werden in der Zeile darüber umgebrochen, weil der umgekehrte Zeilenumbruch aktiviert ist.

Das folgende Beispiel zeigt, wie der FlexBox-Umwicklungsalgorithmus funktioniert. Der Container FlexBox hat eine Hauptgröße von 100dp, wobei wrap auf FlexWrap.Wrap und der Abstand auf 8dp festgelegt ist. Sie enthält drei Elemente mit basis 20dp, 40dp und 50dp.

Es sind 100dp Zeichen in der Zeile verfügbar. Kind 1 ist 20dp. Es ist Platz vorhanden, also wird Kind 1 in die Zeile eingefügt.

Das erste Element, das im Flexbox-Container platziert wird.
Abbildung 1. Der erste Artikel, der in den FlexBox-Container gelegt wurde.

Es sind 80dp Zeichen in der Zeile verfügbar. Die Lücke beträgt 8dp. Kind 2 ist 40dp. Der erforderliche Speicherplatz beträgt 48dp. Es ist Platz vorhanden, sodass die Lücke und Child 2 in die Zeile eingefügt werden.

Das zweite Element wird nach dem ersten Element im FlexBox-Container platziert.
Abbildung 2: Das zweite Element wird nach dem ersten Element im FlexBox-Container platziert.

Es sind 32dp Zeichen in der Zeile verfügbar. Die Lücke beträgt 8dp. Kind 3 ist 50dp. Der erforderliche Speicherplatz beträgt 58dp. In der aktuellen Zeile ist nicht genügend Platz, daher wird „Child 3“ in einer neuen Zeile platziert.

Das dritte Element wird in einer neuen Zeile platziert, da es nicht in die erste Zeile passt.
Abbildung 3: Das dritte Element wird in einer neuen Zeile platziert, da es nicht in die erste Zeile passt.

Lücken zwischen Elementen einfügen

Mit rowGap und columnGap können Sie Lücken zwischen Zeilen und Spalten einfügen. Das ist nützlich, um zu vermeiden, dass untergeordnete Elemente Abstandsmodifikatoren erhalten.

Mit „row gap“ wird vertikaler Abstand zwischen Elementen eingefügt. Mit „Spaltenabstand“ wird horizontaler Abstand zwischen Elementen eingefügt. Mit „Abstand“ wird sowohl horizontaler als auch vertikaler Abstand zwischen Elementen hinzugefügt.

rowGap

fügt vertikalen Abstand zwischen Elementen und Zeilen hinzu.

columnGap

fügt horizontalen Abstand zwischen Elementen und Zeilen hinzu.

gap ist eine praktische Funktion, mit der sowohl columnGap als auch rowGap hinzugefügt werden.