Как вывести CardView по центру?

В программе использую RecyclerView. Написал для него адаптер. ViewHolder содержит CardView с картинкой внутри. Мне нужно выводить эти CardView в две колонки, вертикально. Для этого GridLayoutManager с двумя колонками. Всё работает. Но мне нужно, чтобы CardView выводились колонках по центру, у меня CardView прижимаются к левому краю. Подскажите, как отцентрировать CardView внутри RecyclerView с использованием 2-х колонок GridLayoutManager?

это разметка элемента RecyclerView

<androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/cardViewPerson"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center_horizontal|center_vertical"
    android:layout_marginTop="10dp"
    app:cardCornerRadius="16dp"
    app:cardElevation="8dp">

    <ImageView
        android:id="@+id/imageViewPerson"
        android:layout_width="120dp"
        android:layout_height="120dp"
        android:scaleType="centerCrop"
        android:src="@drawable/im1" />
</androidx.cardview.widget.CardView

Это разметка активити с RecyclerView

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".FragmentStudent">
    <androidx.recyclerview.widget.RecyclerView
        android:id="@+id/recyclerViewPersons"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>
</LinearLayout>

Это код подключения recyclerView

RecyclerView recyclerViewPersons = view.findViewById(R.id.recyclerViewPersons);
ArrayList<Person> setPersons = new SetPersons().getArrayPersons();
RecyclerView.Adapter adapterPerson = new AdapterPersons(setPersons, getContext());
GridLayoutManager gridLayoutManager = new GridLayoutManager(getContext(), 2);
recyclerViewPersons.setAdapter(adapterPerson);
recyclerViewPersons.setLayoutManager(gridLayoutManager);

Результат введите сюда описание изображения

CardView прижаты к левому краю


Ответы (1 шт):

Автор решения: Andrew

Очень сложно понять что именно вам нужно, без вашей разметки. Но я все же попробую вам интуитивно помочь. Создал разметку для элемента списка:

<?xml version="1.0" encoding="utf-8"?>
<com.google.android.material.card.MaterialCardView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_gravity="center_vertical|center_horizontal"
    android:layout_height="wrap_content">

    <ImageView
        android:layout_width="40dp"
        android:layout_height="40dp"
        android:src="@color/colorAccent" />

</com.google.android.material.card.MaterialCardView>

и вот результат:

введите сюда описание изображения

то есть то что вам нужно спрятано в этой строке:

android:layout_gravity="center_vertical|center_horizontal"
→ Ссылка