Dieses Codelab ist Teil des Kurses „Grundlagen von Android und Kotlin“. Sie können diesen Kurs am besten nutzen, wenn Sie die Codelabs der Reihe nach durcharbeiten. Alle Codelabs des Kurses sind auf der Landingpage für Codelabs zu den Grundlagen von Android und Kotlin aufgeführt.
Einführung
Einer der Hauptvorteile von RecyclerView ist, dass Sie Layoutmanager verwenden können, um Ihre Layoutstrategie zu steuern und zu ändern. Ein LayoutManager bestimmt, wie die Elemente in der RecyclerView angeordnet werden.
RecyclerView bietet sofort einsatzbereite Layoutmanager für gängige Anwendungsfälle. Sie können beispielsweise LinearLayout für horizontale und vertikale Listen oder GridLayout für Tabellen verwenden. Für kompliziertere Anwendungsfälle müssen Sie eine benutzerdefinierte LayoutManager implementieren.

In diesem Codelab erfahren Sie, wie Sie Daten in einem Rasterlayout anstelle einer Liste anzeigen. Dabei wird auf der Sleep-Tracker-App aus dem vorherigen Codelab aufgebaut. Wenn Sie die App aus dem vorherigen Codelab nicht haben, können Sie den Startcode für dieses Codelab herunterladen.
Was Sie bereits wissen sollten
Sie sollten mit Folgendem vertraut sein:
- Einfache Benutzeroberfläche mit
Activity,FragmentsundViewserstellen - Zwischen Fragmenten wechseln und
safeArgsverwenden, um Daten zwischen Fragmenten zu übergeben - Modelle, Modell-Factories und Transformationen ansehen
LiveDataund ihre Beobachter- So erstellen Sie eine
Room-Datenbank, ein DAO und definieren Entitäten - Coroutinen für Datenbankaufgaben und andere zeitaufwendige Aufgaben verwenden
- So implementieren Sie ein einfaches
RecyclerViewmit einemAdapter,ViewHolderund Elementlayout - Datenbindung für
RecyclerViewimplementieren - Bindungsadapter zum Transformieren von Daten erstellen und verwenden
Lerninhalte
- So ändern Sie die Darstellung Ihrer Daten im
RecyclerViewmit einem anderenLayoutManager - Rasterlayout für Schlafdaten erstellen
Aufgaben
- In diesem Codelab bauen Sie auf der Sleep-Tracker-App aus dem vorherigen Codelab dieser Reihe auf.
- Ersetzen Sie die Liste der Schlafdaten, die von
RecyclerViewin der App angezeigt werden, durch ein Raster mit Schlafdaten.
Die Schlaftracking-App hat zwei Bildschirme, die durch Fragmente dargestellt werden, wie in der Abbildung unten zu sehen ist.
|
|
Auf dem ersten Bildschirm, der links angezeigt wird, befinden sich Schaltflächen zum Starten und Beenden des Trackings. Auf dem Display werden einige der Schlafdaten des Nutzers angezeigt. Mit der Schaltfläche Löschen werden alle Daten, die die App für den Nutzer erhoben hat, dauerhaft gelöscht. Auf dem zweiten Bildschirm rechts können Sie eine Bewertung der Schlafqualität auswählen.
Diese App verwendet eine vereinfachte Architektur mit einem UI-Controller, einem View-Modell und LiveData sowie einer Room-Datenbank zum Speichern von Schlafdaten.

Die Schlafdaten werden in einem RecyclerView angezeigt. In diesem Codelab ändern Sie die App so, dass sie eine GridLayout verwendet. Der endgültige Bildschirm sieht so aus:

In einem vorherigen Codelab haben Sie beim Hinzufügen von RecyclerView zu fragment_sleep_tracker.xml ein LinearLayoutManager ohne Anpassungen hinzugefügt. In diesem Code werden die Daten als vertikale Liste angezeigt.
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"LinearLayoutManager ist der gängigste und einfachste Layoutmanager für RecyclerView. Er unterstützt sowohl die horizontale als auch die vertikale Platzierung von untergeordneten Ansichten. Sie könnten beispielsweise LinearLayoutManager verwenden, um ein Karussell mit Bildern zu erstellen, durch das der Nutzer horizontal scrollt.
GridLayout
Ein weiterer häufiger Anwendungsfall ist, wenn Sie dem Nutzer viele Daten präsentieren müssen. Das können Sie mit GridLayout tun. Im GridLayoutManager für RecyclerView werden die Daten als scrollbares Raster dargestellt, wie unten zu sehen ist.

Aus Designperspektive ist GridLayout am besten für Listen geeignet, die als Symbole oder Bilder dargestellt werden können, z. B. Listen in einer App zum Durchsuchen von Fotos. In der Schlaftracking-App könnten Sie jede Nacht als Raster mit großen Symbolen darstellen. So kann sich der Nutzer auf einen Blick einen Überblick über seine Schlafqualität verschaffen.
So werden Elemente in GridLayout angeordnet
Mit GridLayout werden Elemente in einem Raster aus Zeilen und Spalten angeordnet. Bei vertikalem Scrollen nimmt standardmäßig jedes Element in einer Zeile einen „Span“ ein. In diesem Fall entspricht ein Bereich der Breite einer Spalte.
In den ersten beiden Beispielen unten besteht jede Zeile aus drei Spans. Standardmäßig werden mit GridLayoutManager alle Elemente in einem Bereich angeordnet, bis die von Ihnen angegebene Anzahl von Bereichen erreicht ist. Wenn die Anzahl der Spans erreicht ist, wird in die nächste Zeile umgebrochen.
Standardmäßig nimmt jedes Element einen Bereich ein. Sie können ein Element jedoch breiter machen, indem Sie angeben, wie viele Bereiche es einnehmen soll. Das oberste Element auf dem Bildschirm ganz rechts (siehe unten) nimmt beispielsweise drei Spannen ein.
|
|
|
In dieser Aufgabe nehmen Sie das RecyclerView, das Sie in der letzten Übung erstellt haben, und aktualisieren es, damit Daten mit einem GridLayoutManager angezeigt werden. Sie können die Schlaftracking-App aus dem vorherigen Codelab weiter verwenden oder die RecyclerViewGridLayout-Starter-App von GitHub herunterladen.
Schritt 1: LayoutManager ändern
- Laden Sie bei Bedarf die App RecyclerViewGridLayout-Starter für dieses Codelab von GitHub herunter und öffnen Sie das Projekt in Android Studio.
- Öffnen Sie die Layoutdatei
fragment_sleep_tracker.xml. - Entfernen Sie den Layoutmanager aus der Definition von
sleep_listRecyclerView.
Zu löschender Code:
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager- Öffnen Sie
SleepTrackerFragment.kt. - Erstellen Sie in
OnCreateView()direkt vor derreturn-Anweisung ein neues vertikalesGridLayoutManagermit drei Spannen.
Der KonstruktorGridLayoutManagerakzeptiert bis zu vier Argumente: einen Kontext, deractivityist, die Anzahl der Spannen (Spalten im vertikalen Standardlayout), eine Ausrichtung (Standard ist vertikal) und ob es sich um ein umgekehrtes Layout handelt (Standard istfalse).
val manager = GridLayoutManager(activity, 3)- Geben Sie unter dieser Zeile an, dass
RecyclerViewdieseGridLayoutManagerverwenden soll.RecyclerViewbefindet sich im Bindungsobjekt und heißtsleepList. (Siehefragment_sleep_tracker.xml.)
binding.sleepList.layoutManager = managerSchritt 2: Layout ändern
Im aktuellen Layout in list_item_sleep_night.xml werden die Daten in einer ganzen Zeile pro Nacht dargestellt. In diesem Schritt definieren Sie ein kompakteres quadratisches Elementlayout für das Raster.
- Öffnen Sie
list_item_sleep_night.xml. - Löschen Sie die
sleep_lengthTextView, da sie im neuen Design nicht benötigt wird. - Verschieben Sie
quality_stringTextView, sodass sie unterImageViewangezeigt wird. Dazu müssen Sie einige Dinge aktualisieren. Hier ist das endgültige Layout fürquality_stringTextView:
<TextView
android:id="@+id/quality_string"
android:layout_width="0dp"
android:layout_height="20dp"
android:textAlignment="center"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="@+id/quality_image"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="@+id/quality_image"
app:layout_constraintTop_toBottomOf="@+id/quality_image"
tools:text="Excellent!!!"
app:sleepQualityString="@{sleep}" />- Prüfen Sie in der Ansicht Design, ob sich das
quality_stringTextViewunter demImageViewbefindet.

Da Sie die Datenbindung verwendet haben, müssen Sie nichts in der Adapter ändern. Der Code sollte einfach funktionieren und Ihre Liste sollte als Raster angezeigt werden.
- Führen Sie die App aus und sehen Sie sich an, wie die Schlafdaten in einem Raster dargestellt werden.
Beachten Sie, dass dieConstraintLayoutweiterhin die gesamte Breite einnimmt. Mit demGridLayoutManagerwird der Ansicht basierend auf ihrer Spanne eine feste Breite zugewiesen.GridLayoutManagerversucht, beim Layout des Rasters alle Einschränkungen zu berücksichtigen, indem es Leerräume einfügt oder Elemente abschneidet.
- Ändern Sie in
SleepTrackerFragmentim Code, mit dem dieGridLayoutManagererstellt wird, die Anzahl der Spannen fürGridLayoutMangerin 1. Wenn Sie die App ausführen, wird eine Liste angezeigt.
val manager = GridLayoutManager(activity, 1)- Ändern Sie die Anzahl der Spannen für
GridLayoutManagerin 10 und führen Sie die App aus.GridLayoutManagerbietet jetzt Platz für 10 Elemente in einer Zeile, aber die Elemente werden abgeschnitten. - Ändern Sie die Anzahl der Spannen in 5 und die Richtung in
GridLayoutManager.VERTICAL. Führen Sie die App aus und sehen Sie sich an, wie Sie horizontal scrollen können. Dafür ist ein anderes Layout erforderlich.
val manager = GridLayoutManager(activity, 5, GridLayoutManager.HORIZONTAL, false)- Vergessen Sie nicht, die Spaltenanzahl wieder auf 3 und die Ausrichtung auf „vertikal“ zu setzen.
Android Studio-Projekt: RecyclerViewGridLayout
- Layoutmanager verwalten, wie die Elemente im
RecyclerViewangeordnet werden. RecyclerViewbietet sofort einsatzbereite Layoutmanager für gängige Anwendungsfälle wieLinearLayoutfür horizontale und vertikale Listen undGridLayoutfür Raster.- Bei komplexeren Anwendungsfällen sollten Sie eine benutzerdefinierte
LayoutManagerimplementieren. - Aus gestalterischer Sicht eignet sich
GridLayoutam besten für Listen mit Elementen, die als Symbole oder Bilder dargestellt werden können. - Mit
GridLayoutwerden Elemente in einem Raster aus Zeilen und Spalten angeordnet. Bei vertikalem Scrollen nimmt jedes Element in einer Zeile einen sogenannten „Span“ ein. - Sie können anpassen, wie viele Spannen ein Element einnimmt, um interessantere Grids zu erstellen, ohne dass ein benutzerdefinierter Layoutmanager erforderlich ist.
- Sie erstellen ein Elementlayout für ein Element im Raster und der Layoutmanager kümmert sich um die Anordnung der Elemente.
- Sie können
LayoutManagerfürRecyclerViewentweder in der XML-Layoutdatei, die das<RecyclerView>-Element enthält, oder programmatisch festlegen.
Udacity-Kurse:
Android-Entwicklerdokumentation:
In diesem Abschnitt werden mögliche Hausaufgaben für Schüler und Studenten aufgeführt, die dieses Codelab im Rahmen eines von einem Kursleiter geleiteten Kurses durcharbeiten. Es liegt in der Verantwortung des Kursleiters, Folgendes zu tun:
- Weisen Sie bei Bedarf Aufgaben zu.
- Teilen Sie den Schülern/Studenten mit, wie sie Hausaufgaben abgeben können.
- Benoten Sie die Hausaufgaben.
Lehrkräfte können diese Vorschläge nach Belieben nutzen und auch andere Hausaufgaben zuweisen, die sie für angemessen halten.
Wenn Sie dieses Codelab selbst durcharbeiten, können Sie mit diesen Hausaufgaben Ihr Wissen testen.
Beantworten Sie diese Fragen
Frage 1
Welche der folgenden Layoutmanager werden von Android bereitgestellt? Wähle alle zutreffenden Antworten aus.
▢ LinearLayouManager
▢ GridLayoutManager
▢ CircularLayoutManager
▢ StaggeredGridLayoutManager
Frage 2
Was ist ein „Zeitraum“?
▢ Die Größe eines Rasters, das von GridLayoutManager erstellt wurde.
▢ Die Breite einer Spalte im Raster.
▢ Die Abmessungen eines Elements in einem Raster.
▢ Die Anzahl der Spalten in einem Raster mit vertikaler Ausrichtung.
Nächste Lektion starten:




