How to center RecyclerView items horizontally with vertical GridLayoutManager

50,996

Solution 1

Try letting the column item fill the width of the column while centering everything inside:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:layout_width="match_parent"
              android:layout_height="180dp"
              android:orientation="vertical"
              android:padding="4dp">

    <ImageView
        android:id="@+id/movie_column_photo"
        android:layout_width="80dp"
        android:layout_height="120dp"
        android:layout_gravity="center_horizontal"/>

    <TextView
        android:id="@+id/movie_column_title"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center"/>
</LinearLayout>

Solution 2

To restate @kris larson's answer;

If you are using ConstraintLayout, adding android:layout_gravity="center" or android:layout_gravity="center_horizontal" to the parent layout in item's XML would be enough (the first parent in hierarchy).

In your case, the codes would be something similar to this:

<android.support.constraint.ConstraintLayout
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        android:layout_width="match_parent"
        android:layout_height="180dp"
        android:orientation="vertical"
        android:padding="4dp"
        android:layout_gravity="center">

        <ImageView

            android:id="@+id/movie_column_photo"
            app:layout_constraintTop_toTopOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            android:layout_width="80dp"
            android:layout_height="120dp"/>

        <TextView
            android:id="@+id/movie_column_title"
            app:layout_constraintTop_toTopOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"/>

</android.support.constraint.ConstraintLayout>
Share:
50,996
Admin
Author by

Admin

Updated on July 05, 2022

Comments

  • Admin
    Admin almost 2 years

    I have a vertical RecyclerView using a GridLayoutManager. I want each column to be centered, but the columns begin all the way on the left. In the following picture you can see what I'm talking about. I used the ugly color scheme to illustrate the columns and background. The green is the background for each item in the RecyclerView, the red is the background of the RecyclerView itself:

    http://imgur.com/a/J3HtF

    I'm setting it up with:

    mRecyclerView.setLayoutManager(new GridLayoutManager(this, 2));
    

    Here's the column_item.xml:

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
                  android:layout_width="120dp"
                  android:layout_height="180dp"
                  android:orientation="vertical"
                  android:padding="4dp">
    
        <ImageView
            android:id="@+id/movie_column_photo"
            android:layout_width="80dp"
            android:layout_height="120dp"/>
    
        <TextView
            android:id="@+id/movie_column_title"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"/>
    </LinearLayout>
    

    Here's the recyclerview xml:

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
    
        <android.support.v7.widget.RecyclerView
            android:id="@+id/company_details_recyclerview"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:scrollbars="vertical">
        </android.support.v7.widget.RecyclerView>
    </LinearLayout>
    
  • Amr Mohammed
    Amr Mohammed over 6 years
    Item with filled width solved the issue to me! thanks
  • MSeiz5
    MSeiz5 almost 5 years
    Great answer! Thanks
  • Neuron
    Neuron almost 5 years
    Excellent result! Thank you
  • dreinoso
    dreinoso over 4 years
    Also, if you have another nested cointainer like a constraintLayout that should use android:layout_width="match_parent" to keep the same
  • Abdulsamet Kılınçarslan
    Abdulsamet Kılınçarslan almost 3 years
    What if I want to column item height to fill screen?