Leos Literak
Leos Literak

Reputation: 9474

RecyclerView with GridLayoutManager - layouting items

I have a simple layout with a recycler. I feed it with Adapter and set GridLayoutManager for the recycler.

<android.support.v7.widget.RecyclerView
android:id="@+id/scripts_recycler_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginBottom="50dp"
android:verticalSpacing="20dp"
android:clipToPadding="false"
android:orientation="vertical"
app:layoutManager="android.support.v7.widget.GridLayoutManager"
tools:listitem="@layout/tmpl_script"
android:paddingBottom="20dp"
android:layout_marginEnd="20dp"
android:layout_marginRight="20dp"
android:paddingTop="30dp"
app:layout_gravity="center" />

Activity

RecyclerView recyclerView = (RecyclerView)findViewById(R.id.scripts_recycler_view);
recyclerView.setAdapter(adapter);
int columns = getResources().getInteger(R.integer.scripts_columns);
recyclerView.setLayoutManager(new GridLayoutManager(this, columns));
recyclerView.setHasFixedSize(true);

Item

<LinearLayout
android:layout_width="300dp"
android:layout_height="300dp"
android:background="@drawable/game_border"
android:gravity="center"
android:orientation="vertical">

I have two problems:

  1. there is no space between rows
  2. items are not centered within the row

I tried all properties in Android Studio but they do not have any effect. I googled, opened many questions but I still have no luck. What magic property shall I use?

As you can see items are positioned on left side of the screen. I want to move it to center. And there is no space between first and second row.

enter image description here enter image description here

Upvotes: 1

Views: 2592

Answers (2)

Uli
Uli

Reputation: 3006

The easiest solution for (1) is to add top and/or bottom margin, like @suraj said.

Regarding (2) - the critical issue is that your items are square. To get it working, set android:layout_width="match_parent" and change the design of your items to use the actual smaller dimension (width or height) for both dimensions (maybe all you need to do in your case is to make the background square). Then display the content centered within the item's LinearLayout (you are already doing this). You have to do it this way because GridLayoutManager does not support layout_gravity at this time.

Upvotes: 2

Suraj Rao
Suraj Rao

Reputation: 29614

For 1.there is no space between rows

Try android:layout_marginBottom="10dp" in the linear layout of item.This should provide the spacing below each item.

For 2.items are not centered within the row

Looks like you have given right margin to your recyclerview and no left margin.

android:layout_marginLeft="20dp"
android:layout_marginStart="20dp"

should give equal spacing on both sides. or set

app:layout_gravity="center"

in linear layout of the item.

Upvotes: 0

Related Questions