Come impostare l'app RecyclerView: layoutManager = “” da XML?


167

Come impostare RecyclerView layoutManager da XML?

    <android.support.v7.widget.RecyclerView
        app:layoutManager="???"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>

Vedi documentazione: recyclerview: layoutManager
dieter_h

1
@dieter_h puoi fornire una risposta con l'esempio di GridLayoutManager?
Ilya Gazman,

4
È possibile utilizzare app:layoutManager="android.support.v7.widget.GridLayoutManager". Verrà utilizzato costruttore con quattro argomenti ( Context, AttributeSet, int, int). Secondo la documentazione, questo è il costruttore utilizzato quando Gestione layout è impostato in XML dall'attributo LayoutManager di RecyclerView. Se spanCount non è specificato nell'XML, per impostazione predefinita viene impostata una singola colonna
thetonrifles

Risposte:


269

Come puoi controllare nel documento:

Nome della classe Layout Managerda utilizzare.

La classe deve estendersi androidx.recyclerview.widget.RecyclerViewView$LayoutManagere avere un costruttore predefinito o un costruttore con la firma(android.content.Context, android.util.AttributeSet, int, int)

Se il nome inizia con un '.', il pacchetto dell'applicazione è preceduto da prefisso. Altrimenti, se il nome contiene a '.', si presuppone che il nome della classe sia un nome di classe completo. Altrimenti, il pacchetto vista riciclatore ( androidx.appcompat.widget) ha il prefisso

Con androidx puoi usare:

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

Con le librerie di supporto è possibile utilizzare:

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

Inoltre puoi aggiungere questi attributi:

  • android:orientation= "horizontal|vertical": Per controllare l'orientamento del LayoutManager (es: LinearLayoutManager)
  • app:spanCount: per impostare il numero di colonne per GridLayoutManager

Esempio:

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

o:

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

Puoi anche aggiungerli usando lo toolsspazio dei nomi (ie tools:orientatione tools:layoutManager) e quindi ha effetto solo sull'anteprima IDE e puoi continuare a impostare quei valori nel codice.


77
E puoi usare android:orientationl'elemento RecyclerView per controllare l'orientamento, ad esempio, di LinearLayoutManager
androidguy

3
@Gabriele Mariotti Ho verificato l'implementazione e utilizza la riflessione. Va bene dal punto di vista delle prestazioni?
Ahmad Fadli,

4
Ci sono più attributi disponibili nel caso in cui utilizzo GridLayoutManager? È possibile impostare il numero di colonne (spanCount)?
Sviluppatore Android

8
@androiddeveloper Sì, ad es. per impostarlo su tre colonne utilizzare l'app: spanCount = "3"
jauser

2
puoi anche usare tools:layoutManager, tools:spanCount(anche se il completamento automatico non lo mostra) e se non vuoi scavalcare nessuna delle tue impostazioni di riciclaggio (o preferisci a livello di programmazione)
mochadwi

88

se vuoi usarlo con LinearLayoutManager

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

quello equivalente a

LinearLayoutManager mLayoutManager = new LinearLayoutManager(getApplicationContext());
mRecyclerView.setLayoutManager(mLayoutManager);

2
Qual è la tua aggiunta alla risposta di Gabriele Mariotti?
Ilya Gazman,

4
spiegare cosa equivale a in codice ma con un altro esempio LinearLayout
Mina Fawzy

7
@UdiOshi per renderlo orizzontale, è necessario aggiungere android:orientation="horizontal"a RecyclerView xml
rf43

7
androidx.recyclerview.widget.LinearLayoutManager per androidX
frapeti

82

E sono venuto qui in cerca di una androidxversione anche se è stato abbastanza facile da capire, eccolo qui

LinearLayoutManager:

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

Esempio:

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

Esempio:

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

Come puoi vedere negli esempi sopra, puoi controllare l'orientamento dall'interno xmlusando

android:orientation="vertical"

e

android:orientation="horizontal"

E per impostare il numero di colonne per GridLayoutManager utilizzando

app:spanCount="2"

10
Puoi impostare no. di colonne quando si utilizza GridLayoutManageraggiungendoapp:spanCount="2"
Pratik Butani

approccio compatibile futuro.
Abhinav Saxena,

Lo stesso qui ... Androidx sta per decollare 🚀
Robin Hood

1
Grazie, stavo cercando, l'ho spanCounttrovato qui. Ecco perché votato per la risposta :)
Jimit Patel

16

I più comuni che utilizzo sono:

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

E:

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

Si consiglia di impostare listitem , in modo da vedere come potrebbe apparire nell'anteprima dell'editor di layout.

Se vuoi invertire l'ordine, penso invece che devi farlo nel codice e usare "strumenti" in XML se vuoi davvero vedere qualcosa ...


qual è appse appspazi dei nomi che hai usato sopra XML? perché sto Android resource linking failed - AAPT: error: attribute orientationusando un errore di tempo di compilazione , se uso app:orientation.
Omkar,

grazie, ma è ancora uno spazio dei nomi sbagliato. Dovrebbe essere androidper orientation. Non funziona con lo appspazio dei nomi, tutto il resto è perfetto.
Omkar,

@Omkar Corretto di nuovo. Scusate. Aggiornato.
sviluppatore Android
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.