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


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.


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);

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"

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ć ...


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.