How to center RecyclerView items horizontally with vertical GridLayoutManager
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>
![Admin](/assets/logo_square_200-5d0d61d6853298bd2a4fe063103715b4daf2819fc21225efa21dfb93e61952ea.png)
Admin
Updated on July 05, 2022Comments
-
Admin almost 2 years
I have a vertical
RecyclerView
using aGridLayoutManager
. 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 theRecyclerView
, the red is the background of theRecyclerView
itself: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 over 6 yearsItem with filled width solved the issue to me! thanks
-
MSeiz5 almost 5 yearsGreat answer! Thanks
-
Neuron almost 5 yearsExcellent result! Thank you
-
dreinoso over 4 yearsAlso, 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 almost 3 yearsWhat if I want to column item height to fill screen?