Wie setze ich die RecyclerView-App: layoutManager = "" aus XML?

167

Wie stelle ich RecyclerView layoutManager aus XML ein?

    <android.support.v7.widget.RecyclerView
        app:layoutManager="???"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>
Ilya Gazman
quelle
Siehe Dokumentation: recyclerview: layoutManager
dieter_h
1
@dieter_h können Sie eine Antwort mit dem GridLayoutManager-Beispiel geben?
Ilya Gazman
4
Sie können verwenden app:layoutManager="android.support.v7.widget.GridLayoutManager". Constructor mit vier Argumente verwendet ( Context, AttributeSet, int, int). Laut Dokumentation ist dies der Konstruktor, der verwendet wird, wenn der Layout-Manager vom RecyclerView-Attribut layoutManager in XML festgelegt wird. Wenn spanCount nicht in der XML angegeben ist, wird standardmäßig eine einzelne Spalte verwendet
Thetonrifles

Antworten:

269

Wie Sie im Dokument einchecken können:

Klassenname des Layout Managerzu verwendenden.

Die Klasse muss erweitert werden androidx.recyclerview.widget.RecyclerViewView$LayoutManagerund entweder einen Standardkonstruktor oder einen Konstruktor mit der Signatur haben(android.content.Context, android.util.AttributeSet, int, int)

Wenn der Name mit a beginnt '.', wird dem Anwendungspaket ein Präfix vorangestellt. '.'Andernfalls wird angenommen, dass der Klassenname ein vollständiger Klassenname ist , wenn der Name a enthält . Andernfalls wird dem Recycler View-Paket ( androidx.appcompat.widget) ein Präfix vorangestellt

Mit AndroidX können Sie verwenden:

<androidx.recyclerview.widget.RecyclerView
     xmlns:app="http://schemas.android.com/apk/res-auto"
     app:layoutManager="androidx.recyclerview.widget.GridLayoutManager">

Mit den Support-Bibliotheken können Sie verwenden:

<android.support.v7.widget.RecyclerView
    xmlns:app="http://schemas.android.com/apk/res-auto"
    app:layoutManager="android.support.v7.widget.GridLayoutManager" >

Sie können auch folgende Attribute hinzufügen:

  • android:orientation= "horizontal|vertical": Die Orientierung der Layoutmanager steuern (zB LinearLayoutManager)
  • app:spanCount: um die Anzahl der Spalten für festzulegen GridLayoutManager

Beispiel:

<androidx.recyclerview.widget.RecyclerView
    app:layoutManager="androidx.recyclerview.widget.GridLayoutManager"
    app:spanCount="2"
    ...>

oder:

<androidx.recyclerview.widget.RecyclerView
    app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
    android:orientation="vertical"
    ...>

Sie können sie auch über den toolsNamespace (dh tools:orientationund tools:layoutManager) hinzufügen. Dies wirkt sich dann nur auf die IDE-Vorschau aus und Sie können diese Werte weiterhin im Code festlegen.

Gabriele Mariotti
quelle
77
Und Sie können android:orientationauf dem RecyclerView-Element verwenden, um die Ausrichtung von zB LinearLayoutManager
androidguy
3
@ Gabriele Mariotti Ich habe die Implementierung überprüft und sie verwendet Reflexion. Ist das in Bezug auf die Leistung in Ordnung?
Ahmad Fadli
4
Gibt es mehr verfügbare Attribute für den Fall, dass ich GridLayoutManager verwende? Ist es möglich, die Anzahl der Spalten (spanCount) festzulegen?
Android-Entwickler
8
@androiddeveloper Ja, zB um es auf drei Spalten zu setzen, benutze app: spanCount = "3"
jauser
2
Sie können auch verwenden tools:layoutManager, tools:spanCount(obwohl die automatische Vervollständigung dies nicht
anzeigt
87

wenn Sie es mit verwenden möchten LinearLayoutManager

<android.support.v7.widget.RecyclerView
    xmlns:app="http://schemas.android.com/apk/res-auto"
    app:layoutManager="android.support.v7.widget.LinearLayoutManager" >

das Äquivalent zu

LinearLayoutManager mLayoutManager = new LinearLayoutManager(getApplicationContext());
mRecyclerView.setLayoutManager(mLayoutManager);
Mina Fawzy
quelle
2
Was ist Ihre Ergänzung zu Gabriele Mariotti Antwort?
Ilya Gazman
4
Erklären Sie, was dem Code entspricht, aber mit einem anderen Beispiel: LinearLayout
Mina Fawzy
7
@UdiOshi, um es horizontal zu machen, müssen Sie android:orientation="horizontal"zur RecyclerView xml hinzufügen
rf43
7
androidx.recyclerview.widget.LinearLayoutManager für androidX
frapeti
81

Und ich bin hierher gekommen, um nach einer androidxVersion zu suchen, obwohl es ziemlich einfach war herauszufinden, hier ist sie

LinearLayoutManager:

app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"

Beispiel:

<androidx.recyclerview.widget.RecyclerView
    android:id="@+id/recyclerView"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"/>

GridLayoutManager:

app:layoutManager="androidx.recyclerview.widget.GridLayoutManager"

Beispiel:

<androidx.recyclerview.widget.RecyclerView
    android:id="@+id/recyclerView"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    app:spanCount="2"
    app:layoutManager="androidx.recyclerview.widget.GridLayoutManager"/>

Wie Sie in den obigen Beispielen sehen können, können Sie die Ausrichtung xmlmithilfe von innen steuern

android:orientation="vertical"

und

android:orientation="horizontal"

Und um die Anzahl der Spalten für GridLayoutManager mit festzulegen

app:spanCount="2"
Max
quelle
10
Sie können nein einstellen. von Spalten, wenn Sie GridLayoutManagerdurch Hinzufügen verwendenapp:spanCount="2"
Pratik Butani
zukunftsfähiger Ansatz.
Abhinav Saxena
Gleiche hier ... Androidx kurz vor dem Start
Robin
1
Danke, ich habe gesucht spanCount, habe es hier gefunden. Deshalb stimmen Sie der Antwort zu :)
Jimit Patel
16

Die häufigsten, die ich benutze, sind:

<androidx.recyclerview.widget.RecyclerView
    app:layoutManager="androidx.recyclerview.widget.GridLayoutManager" 
    tools:listitem="@layout/grid_item"
    android:orientation="vertical" app:spanCount="3"/>

Und:

<androidx.recyclerview.widget.RecyclerView
    app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
    tools:listitem="@layout/grid_item"
    android:orientation="vertical"/>

Es wird empfohlen, einzustellen listitem so festzulegen, dass Sie in der Vorschau des Layout-Editors sehen können, wie sie aussehen könnte.

Wenn Sie jedoch die Reihenfolge umkehren möchten, müssen Sie dies stattdessen im Code tun und "Tools" in XML verwenden, wenn Sie wirklich etwas sehen möchten ...

Android-Entwickler
quelle
das ist appsund appNamespaces in XML oben verwendet haben? weil ich Build Time Fehler bekomme Android resource linking failed - AAPT: error: attribute orientation, wenn ich benutze app:orientation.
Omkar
danke, aber es ist immer noch ein falscher Namespace. Es sollte androidfür sein orientation. Es funktioniert nicht mit dem appNamespace, alles andere ist perfekt.
Omkar
@ Omkar Wieder korrigieren. Es tut uns leid. Aktualisiert.
Android-Entwickler