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

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.


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

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"

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


¿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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.