¿Cómo configurar la aplicación RecyclerView: layoutManager = “” desde XML?

167

Cómo configurar RecyclerView layoutManager desde XML?

    <android.support.v7.widget.RecyclerView
        app:layoutManager="???"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>
Ilya Gazman
fuente
Ver documentación: recyclerview: layoutManager
dieter_h
1
@dieter_h, ¿puede proporcionar una respuesta con el ejemplo GridLayoutManager?
Ilya Gazman
44
Puedes usar app:layoutManager="android.support.v7.widget.GridLayoutManager". Se utilizará Constructor con cuatro argumentos ( Context, AttributeSet, int, int). Según la documentación, este es el constructor utilizado cuando el administrador de diseño se configura en XML mediante el atributo RecyclerView layoutManager. Si spanCount no se especifica en el XML, el valor predeterminado es una sola columna
thetonrifles

Respuestas:

269

Como puedes consultar en el documento:

Nombre de clase del Layout Managerque se utilizará.

La clase debe extenderse androidx.recyclerview.widget.RecyclerViewView$LayoutManagery tener un constructor predeterminado o un constructor con la firma(android.content.Context, android.util.AttributeSet, int, int)

Si el nombre comienza con a '.', el paquete de la aplicación tiene el prefijo. De lo contrario, si el nombre contiene a '.', se supone que el nombre de clase es un nombre de clase completo. De lo contrario, el paquete de vista de reciclador ( androidx.appcompat.widget) tiene el prefijo

Con androidx puedes usar:

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

Con las bibliotecas de soporte puede usar:

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

También puede agregar estos atributos:

  • android:orientation = "horizontal|vertical" : Para controlar la orientación de la LayoutManager (por ejemplo: LinearLayoutManager)
  • app:spanCount: para establecer el número de columnas para GridLayoutManager

Ejemplo:

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

También puede agregarlos usando el toolsespacio de nombres (es decir, tools:orientationy tools:layoutManager) y luego solo afecta la vista previa del IDE y puede continuar estableciendo esos valores en el código.

Gabriele Mariotti
fuente
77
Y puede usar android:orientationel elemento RecyclerView para controlar la orientación de, por ejemplo, LinearLayoutManager
androidguy
3
@Gabriele Mariotti Verifiqué la implementación y utiliza la reflexión. ¿Está bien desde el punto de vista del rendimiento?
Ahmad Fadli
44
¿Hay más atributos disponibles en caso de que use GridLayoutManager? ¿Es posible establecer su número de columnas (spanCount)?
Desarrollador de Android
8
@androiddeveloper Sí, por ejemplo, para configurarlo en tres columnas, use la aplicación: spanCount = "3"
jauser
2
también puede usar tools:layoutManager, tools:spanCount(aunque el autocompletado no lo muestre) y si no desea anular ninguna de las configuraciones de la vista de reciclaje (o prefiere programáticamente)
mochadwi
88

si quieres usarlo con LinearLayoutManager

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

eso equivalente a

LinearLayoutManager mLayoutManager = new LinearLayoutManager(getApplicationContext());
mRecyclerView.setLayoutManager(mLayoutManager);
Mina Fawzy
fuente
2
¿Cuál es su adición a la respuesta de Gabriele Mariotti?
Ilya Gazman
44
explique qué equivale al código pero con otro ejemplo LinearLayout
Mina Fawzy
77
@UdiOshi para hacerlo horizontal, debe agregar android:orientation="horizontal"al RecyclerView xml
rf43
77
androidx.recyclerview.widget.LinearLayoutManager para androidX
frapeti
82

Y vine aquí buscando la androidxversión, aunque fue bastante fácil de entender, aquí está

LinearLayoutManager:

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

Ejemplo:

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

Ejemplo:

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

Como puede ver en los ejemplos anteriores, puede controlar la orientación desde adentro xmlusando

android:orientation="vertical"

y

android:orientation="horizontal"

Y para establecer el número de columnas para GridLayoutManager usando

app:spanCount="2"
Max
fuente
10
Puedes configurar no. de columnas cuando usas GridLayoutManageragregandoapp:spanCount="2"
Pratik Butani
Enfoque futuro compatible.
Abhinav Saxena
Lo mismo aquí ... Androidx a punto de despegar 🚀
Robin Hood
1
Gracias que estaba buscando lo spanCountencontré aquí. Es por eso que votar a favor de la respuesta :)
Jimit Patel
16

Los más comunes que uso son:

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

Y:

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

Se recomienda configurar listitem , para que vea cómo se vería en la vista previa del editor de diseño.

Sin embargo, si desea que se invierta el orden, creo que debe hacerlo en código y usar "herramientas" en XML si realmente quiere ver algo ...

desarrollador de Android
fuente
¿Cuál es appsy los appespacios de nombres que ha utilizado en xml anterior? porque recibo un error de tiempo de compilación Android resource linking failed - AAPT: error: attribute orientation, si lo uso app:orientation.
Omkar
gracias, pero aún así es un espacio de nombres incorrecto. Debería ser androidpara orientation. No funciona con appespacio de nombres, todo lo demás es perfecto.
Omkar
@ Omkar Corregir de nuevo. Lo siento. Actualizado.
Desarrollador de Android