android - How to set RecyclerView app:layoutManager="" from XML?


Translate

How to set RecyclerView layoutManager from XML?

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


All Answers
  • Translate

    As you can check in the doc:

    Class name of the Layout Manager to be used.

    The class must extend android.support.v7.widget.RecyclerView$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 name (android.support.v7.widget) is prefixed.

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

    With androidx you can use:

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

  • Translate

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

  • Translate

    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"
    

  • Translate

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