如何将 RecyclerView 与 GridLayout (spanCount = 2) 居中?

How to Center RecyclerView with GridLayout (spanCount = 2)?

所以我正在试验 RecyclerView

这是我的 activity_main...

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    tools:context=".MainActivity">

    <androidx.recyclerview.widget.RecyclerView
        android:id="@+id/activityMain_recyclerView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_gravity="center"
        app:layoutManager="androidx.recyclerview.widget.GridLayoutManager"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:spanCount="2"/>
</LinearLayout>

这是我的 MainActivity...

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        cardView()
    }

    private fun cardView() {
        val adapterReference = GroupAdapter<GroupieViewHolder>()
        activityMain_recyclerView.adapter = adapterReference
       // activityMain_recyclerView.layoutManager = GridLayoutManager(this, 2)

        adapterReference.add(CardViewGroup())
        adapterReference.add(CardViewGroup())
        adapterReference.add(CardViewGroup())
        adapterReference.add(CardViewGroup())
        adapterReference.add(CardViewGroup())
        adapterReference.add(CardViewGroup())
        adapterReference.add(CardViewGroup())
        adapterReference.add(CardViewGroup())
        adapterReference.add(CardViewGroup())

    }
}

class CardViewGroup() : Item<GroupieViewHolder>() {
    override fun getLayout(): Int {
        return R.layout.layout_card_view
    }

    override fun bind(viewHolder: GroupieViewHolder, position: Int) {
    }

}

目前看起来是这样的...

我希望让它看起来像...

您还没有分享 layout_card_view.xml 但我认为这会起作用

在您的 layout_card_view.xml

中添加 android:layout_gravity="center"

希望对您有所帮助

我做到了

将此代码用于 layout_card_view.xml

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:paddingTop="16dp"
    android:paddingBottom="16dp"
    xmlns:app="http://schemas.android.com/apk/res-auto">

    <androidx.cardview.widget.CardView
        android:layout_width="96dp"
        android:layout_height="128dp"
        android:backgroundTint="#6060ff"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintEnd_toEndOf="parent">


        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:gravity="center"
            android:text="Hello world!"/>

    </androidx.cardview.widget.CardView>

</androidx.constraintlayout.widget.ConstraintLayout>

解决了这个问题。

在 recyclerView 体验中获得最佳效果的步骤

  • <CardView> 作为布局的父级,并将其尺寸设置为...

    layout_width="match_parent"

    layout_height="wrap_content"

    layout_margin="16dp" try and remove this after building it to see the difference.

  • <ConstraintLayout> 作为 <CardView> 父级中的容器。并将其尺寸设置为...

    layout_width="match_parent"

    layout_height="wrap_content"

P.s。不要忘记为您的 Cardview 背景和 recyclerView 背景添加对比以清楚地看到差异