How to set RecyclerView app:layoutManager="" from XML?
Asked Answered
D

7

221

How to set RecyclerView layoutManager from XML?

    <android.support.v7.widget.RecyclerView
        app:layoutManager="???"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>
Dasilva answered 28/2, 2016 at 7:7 Comment(3)
See documentation: recyclerview:layoutManagerVassar
@Vassar can you provide an answer with GridLayoutManager example?Dasilva
You can use app:layoutManager="android.support.v7.widget.GridLayoutManager". Constructor with four arguments will be used (Context, AttributeSet, int, int). According to documentation this is the constructor used when layout manager is set in XML by RecyclerView attribute layoutManager. If spanCount is not specified in the XML, it defaults to a single columnAnguish
F
366

As you can check in the doc:

Class name of the Layout Manager to be used.

The class must extend androidx.recyclerview.widget.RecyclerViewView$LayoutManager and have either a default constructor or constructor with the signature (android.content.Context, android.util.AttributeSet, int, int)

If the name starts with a '.', application package is prefixed. Else, if the name contains a '.', the classname is assumed to be a full class name. Else, the recycler view package (androidx.appcompat.widget) is prefixed

With androidx you can use:

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

With the support libraries you can use:

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

Also you can add these attributes:

  • android:orientation = "horizontal|vertical": to control the orientation of the LayoutManager (eg:LinearLayoutManager)
  • app:spanCount: to set the number of columns for GridLayoutManager

Example:

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

or:

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

You can also add them using the tools namespace (i.e. tools:orientation and tools:layoutManager) and then it only impacts the IDE preview and you can continue setting those values in code.

Farther answered 28/2, 2016 at 9:18 Comment(10)
And you can use android:orientation on the RecyclerView element to control the orientation of e.g. LinearLayoutManagerHomer
@Gabriele Mariotti I checked the implementation and it uses reflection. Is that okay from performance wise?Repetitious
As of this comment it seems the docs no longer have that useful explanation. So frustrating that @Google can't even keep their docs correct.Domiciliate
Regarding my previous comment I've created an issue ticket for it here.Domiciliate
Are there more available attributes in case I use GridLayoutManager ? Is it possible to set its number of columns (spanCount) ?Noyes
@androiddeveloper Yes, e.g. to set it to three columns use app:spanCount="3"Rhymester
is there a way to define number of columns?Weirdie
@nimi0112 use this app:layoutManager="androidx.recyclerview.widget.GridLayoutManager"Carmencita
Please switch to AndroidX.Lecythus
you can also use tools:layoutManager, tools:spanCount (even though the auto-complete doesn't show it) and if you don't want to override any of your recyclerview setup (or prefer programatically)Meaningless
C
95

And I came here looking for androidx version though it was pretty easy to figure out, here it is

LinearLayoutManager:

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

Example:

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

Example:

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

As you can see in examples above you can control the orientation from within xml using

android:orientation="vertical"

and

android:orientation="horizontal"

And to set the number of columns for GridLayoutManager using

app:spanCount="2"
Camass answered 22/10, 2018 at 0:26 Comment(4)
You can set no. of columns when you use GridLayoutManager by adding app:spanCount="2"Rosser
future compatible approach.Lecythus
Same here... Androidx about to take off 🚀Oberheim
Thanks I was looking for spanCount found it here. Thats why upvote to the answer :)Beading
S
94

if you want use it with LinearLayoutManager

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

that equivalent to

LinearLayoutManager mLayoutManager = new LinearLayoutManager(getApplicationContext());
mRecyclerView.setLayoutManager(mLayoutManager);
Selfabuse answered 23/2, 2017 at 12:27 Comment(4)
What is your addition to Gabriele Mariotti answer?Dasilva
explain what equivalent to in code but with anther example LinearLayoutSelfabuse
@UdiOshi to make it horizontal, you need to add android:orientation="horizontal" to the RecyclerView xmlCorporative
androidx.recyclerview.widget.LinearLayoutManager for androidXBozen
N
18

The most common ones that I use are:

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

And:

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

It's recommended to set listitem , so that you'd see how it could look in the preview of the layout editor.

If you want to have the order reversed though, I think you have to do it in code instead, and use "tools" in XML if you really want to see something...

Noyes answered 20/2, 2019 at 14:38 Comment(3)
which is apps and app namespaces you have used in above xml? because I am getting build time error Android resource linking failed - AAPT: error: attribute orientation, if I use app:orientation.Prophylactic
thanks, but still it is wrong namespace. It should be android for orientation. It doesn't work with app namespace everything else is perfect.Prophylactic
@Prophylactic Correct again. Sorry. Updated.Noyes
V
3

This worked for me - just add app:layoutManager="LinearLayoutManager" and you're good to go

    <android.support.v7.widget.RecyclerView
        android:id="@+id/recordItemList"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        android:clipToPadding="false"
        android:scrollbars="none"
        app:layoutManager="LinearLayoutManager"
        app:stackFromEnd="true"
        app:reverseLayout="true"/>
Voyeur answered 15/9, 2020 at 1:25 Comment(0)
V
1

You can set the layout manager for recyclerview like this, app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"

Varion answered 15/9, 2020 at 11:40 Comment(0)
W
0

Example

implementation 'com.android.support:recyclerview-v7:28.0.0'
<android.support.v7.widget.RecyclerView
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"

    tools:layoutManager="android.support.v7.widget.LinearLayoutManager"
    />

layoutManager can be android.support.v7.widget.LinearLayoutManager, android.support.v7.widget.GridLayoutManager

[Read more here]

Williamswilliamsburg answered 7/10, 2022 at 13:50 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.