Jak ustawić aplikację RecyclerView: layoutManager = „” z XML?

167

Jak ustawić layoutManager RecyclerView z XML?

    <android.support.v7.widget.RecyclerView
        app:layoutManager="???"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>
Ilya Gazman
źródło
Zobacz dokumentację: recyclinglerview: layoutManager
dieter_h
1
@dieter_h czy możesz udzielić odpowiedzi na przykładzie GridLayoutManager?
Ilya Gazman
4
Możesz użyć app:layoutManager="android.support.v7.widget.GridLayoutManager". Konstruktor z czterech argumentów zostaną wykorzystane ( Context, AttributeSet, int, int). Zgodnie z dokumentacją jest to konstruktor używany, gdy menedżer układu jest ustawiony w XML przez atrybut layoutManager RecyclerView. Jeśli spanCount nie jest określony w kodzie XML, domyślnie jest to pojedyncza kolumna
thetonrifles

Odpowiedzi:

269

Jak możesz sprawdzić w dokumencie:

Nazwa klasy, Layout Managerktóra ma być używana.

Klasa musi rozszerzać się androidx.recyclerview.widget.RecyclerViewView$LayoutManageri mieć domyślny konstruktor lub konstruktor z podpisem(android.content.Context, android.util.AttributeSet, int, int)

Jeśli nazwa zaczyna się od a '.', prefiks jest poprzedzony pakietem aplikacji. W przeciwnym razie, jeśli nazwa zawiera a '.', zakłada się, że nazwa klasy jest pełną nazwą klasy. W przeciwnym razie pakiet widoku recyklera (androidx.appcompat.widget przedrostek jest poprzedzony )

W systemie Androidx możesz używać:

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

Dzięki bibliotekom wsparcia możesz skorzystać z:

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

Możesz również dodać te atrybuty:

  • android:orientation= "horizontal|vertical": do kontrolowania orientacji LayoutManager (np .:LinearLayoutManager )
  • app:spanCount: aby ustawić liczbę kolumn dla GridLayoutManager

Przykład:

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

lub:

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

Możesz również dodać je za pomocą toolsprzestrzeni nazw (tj. tools:orientationI tools:layoutManager), a wtedy wpłynie to tylko na podgląd IDE i możesz kontynuować ustawianie tych wartości w kodzie.

Gabriele Mariotti
źródło
77
I możesz użyć android:orientationw elemencie RecyclerView do kontrolowania orientacji np. LinearLayoutManager
androidguy
3
@Gabriele Mariotti Sprawdziłem implementację i używa refleksji. Czy to w porządku z punktu widzenia wydajności?
Ahmad Fadli
4
Czy jest więcej dostępnych atrybutów w przypadku, gdy używam GridLayoutManager? Czy można ustawić liczbę kolumn (spanCount)?
programista Androida
8
@androiddeveloper Tak, np. aby ustawić trzy kolumny, użyj app: spanCount = "3"
jauser
2
możesz również użyć tools:layoutManager, tools:spanCount(nawet jeśli autouzupełnianie tego nie pokazuje) i jeśli nie chcesz nadpisywać żadnej z konfiguracji
widoku
88

jeśli chcesz go używać z LinearLayoutManager

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

ten odpowiednik

LinearLayoutManager mLayoutManager = new LinearLayoutManager(getApplicationContext());
mRecyclerView.setLayoutManager(mLayoutManager);
Mina Fawzy
źródło
2
Jaki jest twój dodatek do odpowiedzi Gabriele Mariotti?
Ilya Gazman
4
wyjaśnij, co jest odpowiednikiem w kodzie, ale z innym przykładem LinearLayout
Mina Fawzy
7
@UdiOshi, aby było poziome, musisz dodać android:orientation="horizontal"do RecyclerView xml
rf43
7
androidx.recyclerview.widget.LinearLayoutManager for androidX
frapeti
82

Przyszedłem tutaj, szukając androidxwersji, chociaż było to dość łatwe do odgadnięcia, oto ona

LinearLayoutManager:

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

Przykład:

<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"

Przykład:

<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"/>

Jak widać na przykładach powyżej, orientację można kontrolować z poziomu xmlza pomocą

android:orientation="vertical"

i

android:orientation="horizontal"

Oraz ustawić liczbę kolumn dla GridLayoutManager przy użyciu

app:spanCount="2"
Maks
źródło
10
Możesz ustawić nie. kolumn, gdy używasz GridLayoutManager, dodającapp:spanCount="2"
Pratik Butani
przyszłościowe podejście.
Abhinav Saxena,
To samo tutaj ... Androidx zaraz wystartuje 🚀
Robin Hood
1
Dzięki szukałem spanCountznalazłem to tutaj. Dlatego głosujcie za odpowiedzią :)
Jimit Patel
16

Najpopularniejsze z nich to:

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

I:

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

Zaleca się ustawić listitem tak, aby zobaczyć, jak może wyglądać w podglądzie edytora układu.

Jeśli jednak chcesz odwrócić kolejność, myślę, że musisz to zrobić w kodzie i użyć „narzędzi” w XML, jeśli naprawdę chcesz coś zobaczyć ...

programista Androida
źródło
co to jest appsi appprzestrzenie nazw, których użyłeś w powyższym XML? ponieważ otrzymuję błąd czasu kompilacjiAndroid resource linking failed - AAPT: error: attribute orientation , jeśli używam app:orientation.
Omkar
dzięki, ale nadal jest to zła przestrzeń nazw. Powinien być androiddla orientation. To nie działa z appprzestrzenią nazw, wszystko inne jest idealne.
Omkar
@Omkar Correct ponownie. Przepraszam. Zaktualizowano.
programista Androida