Sie können eine Grid-Containerkonfiguration definieren, um flexible Layouts zu erstellen, die auf unterschiedliche Bildschirmgrößen und Inhaltstypen reagieren. Auf dieser Seite wird beschrieben, wie Sie Folgendes tun:
- Raster definieren: Grundstruktur aus Zeilen und Spalten einrichten
- Elemente in einem Raster platzieren: Informationen dazu, wie Elemente in Rasterzellen platziert werden und wie Sie die Flussrichtung ändern
- Trackgröße verwalten: Feste, prozentuale, flexible und intrinsische Größen verwenden, um Trackgrößen festzulegen
- Abstände festlegen: „Abstände“ zwischen Zeilen und Spalten verwalten
Raster definieren
Ein Raster besteht aus Spalten und Zeilen.
Die Grid zusammensetzbare Funktion hat einen config-Parameter
, der eine Lambda-Funktion akzeptiert, um die Spalten und Zeilen
in GridConfigurationScope zu definieren.
Im folgenden Beispiel wird ein Raster mit drei Zeilen und zwei Spalten definiert,
wobei jede eine feste Größe in Dp hat:
Grid( config = { repeat(2) { column(160.dp) } repeat(3) { row(90.dp) } } ) { }
Elemente in einem Raster platzieren
Grid verwendet die UI-Elemente in der content-Lambda-Funktion und platziert sie in Rasterzellen.
Die Elemente werden im Raster angeordnet, unabhängig davon, ob Sie die Zeilen und Spalten explizit definiert haben.
Standardmäßig versucht Grid, ein UI-Element in der verfügbaren Rasterzelle in der Zeile zu platzieren. Wenn das nicht möglich ist, wird es in einer verfügbaren Rasterzelle in der nächsten Zeile platziert.
Wenn keine leeren Zellen vorhanden sind, erstellt Grid eine neue Zeile.
Im folgenden Beispiel hat das Raster sechs Rasterzellen und in jeder Zelle wird eine Karte platziert (Abbildung 1).
Jede Rasterzelle ist 160dp × 90dp groß, sodass die Gesamtgröße des Rasters 320dp × 270dp beträgt.
Grid( config = { repeat(2) { column(160.dp) } repeat(3) { row(90.dp) } } ) { Card1() Card2() Card3() Card4() Card5() Card6() }
Wenn Sie dieses Standardverhalten in „Nach Spalten füllen“ ändern möchten,
legen Sie die flow-Property auf GridFlow.Column fest.
Grid( config = { repeat(2) { column(160.dp) } repeat(3) { row(90.dp) } gap(8.dp) flow = GridFlow.Column // Grid tries to place items to fill the column }, ) { Card1() Card2() Card3() Card4() Card5() Card6() }
GridFlow.Row (links) und GridFlow.Column (rechts).
Trackgröße verwalten
Zeilen und Spalten werden zusammen als ein Raster-Track bezeichnet. Sie können die Größe eines Raster-Tracks mit einer der folgenden Methoden angeben:
- Fest (
Dp): Weist eine bestimmte Größe zu (z.B.column(180.dp)). - Prozentual (
Float): Weist einen Prozentsatz des insgesamt verfügbaren Platzes von0.0fbis1.0fzu (z.B.row(0.5f)für 50%). - Flexibel (
Fr): Verteilt den verbleibenden Platz proportional, nachdem feste und prozentuale Tracks berechnet wurden. Wenn beispielsweise zwei Zeilen auf1.frund3.frfestgelegt sind, erhält die zweite Zeile 75% der verbleibenden Höhe. - Intrinsisch: Legt die Größe des Tracks basierend auf dem Inhalt fest. Weitere Informationen finden Sie unter Größe von Raster-Tracks intrinsisch bestimmen.
Im folgenden Beispiel werden die verschiedenen Optionen zur Größenanpassung von Tracks verwendet, um die Zeilenhöhen zu definieren:
Grid( config = { column(1f) row(100.dp) row(0.2f) row(1.fr) row(GridTrackSize.Auto) }, modifier = Modifier.height(480.dp) ) { PastelRedCard("Fixed(100.dp)")
Grid definiert wurden.
Größe von Raster-Tracks intrinsisch bestimmen
Sie können die intrinsische Größe für ein Grid
verwenden, wenn das Layout an den Inhalt angepasst werden soll,
anstatt ihn in einen festen Container zu zwingen.
Die Größe des Raster-Tracks wird mit den folgenden Werten bestimmt:
GridTrackSize.MaxContent: Verwenden Sie die maximale intrinsische Größe des Inhalts. Die Breite wird beispielsweise durch die vollständige Länge des Texts in einem Textblock ohne Umbruch bestimmt.GridTrackSize.MinContent: Verwenden Sie die minimale intrinsische Größe des Inhalts. Die Breite wird beispielsweise durch das längste einzelne Wort in einem Textblock bestimmt.GridTrackSize.Auto: Verwenden Sie eine flexible Größe für einen Track, die sich an den verfügbaren Platz anpasst. Standardmäßig verhält sie sich wieMaxContent, verkleinert aber den Inhalt und bricht ihn um, damit er in den übergeordneten Container passt.
Im folgenden Beispiel werden zwei Texte nebeneinander platziert. Die Spaltengröße für den ersten Text wird durch die erforderliche Mindestbreite zum Anzeigen des Texts bestimmt. Die Breite der zweiten Spalte hängt von der erforderlichen maximalen Breite des Texts ab.
Grid( config = { column(GridTrackSize.MinContent) column(GridTrackSize.MaxContent) row(1.0f) }, modifier = Modifier.width(480.dp) ) { Text("Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras imperdiet." ) Text("Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras imperdiet." ) }
Abstände zwischen Zeilen und Spalten festlegen
Sobald die Größe Ihrer Raster-Tracks festgelegt ist,
können Sie den Rasterabstand ändern, um den Abstand zwischen den Tracks zu optimieren.
Sie können den Spaltenabstand mit der columnGap Funktion,
und den Zeilenabstand mit rowGap angeben. Im folgenden Beispiel beträgt der Abstand zwischen den Zeilen 16dp und der Abstand zwischen den Spalten 8dp (Abbildung 5).
Grid( config = { repeat(2) { column(160.dp) } repeat(3) { row(90.dp) } rowGap(16.dp) columnGap(8.dp) } ) { Card1() Card2() Card3() Card4() Card5() Card6() }
Sie können auch die praktische Funktion gap
verwenden, um Abstände mit derselben Spalten- und Zeilengröße zu definieren,
und Spalten- und Abstandsgrößen mit einer einzigen Funktion separat zu definieren.
Mit dem folgenden Code werden dem Raster Abstände von 8dp hinzugefügt:
Grid( config = { repeat(2) { column(160.dp) } repeat(3) { row(90.dp) } gap(8.dp) // Equivalent to columnGap(8.dp) and rowGap(8.dp) } ) { Card1() Card2() Card3() Card4() Card5() Card6() }