【问题标题】:How to Center RecyclerView with GridLayout (spanCount = 2)?如何使用 GridLayout (spanCount = 2) 使 RecyclerView 居中?
【发布时间】:2020-10-19 16:43:12
【问题描述】:

所以我正在尝试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 代码更新您的问题
  • 能否添加 layout_card_view 的代码?我认为您将视图放错了位置。
  • @FilipSollár 我刚刚做了,但它仍然不起作用。我还尝试将 LinearLayout 添加为 cardview 子项的父项,但它不起作用

标签: android android-layout kotlin android-recyclerview cardview


【解决方案1】:

解决了这个问题。

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

  • &lt;CardView&gt; 设为布局的父级,并将其尺寸设置为...

    layout_width="match_parent"

    layout_height="wrap_content"

    layout_margin="16dp" 在构建后尝试删除它以查看差异。

  • &lt;ConstraintLayout&gt; 设为&lt;CardView&gt; 父级中的容器。并将其尺寸设置为...

    layout_width="match_parent"

    layout_height="wrap_content"

附:不要忘记为您的 Cardview 背景和 recyclerView 背景添加对比度以清楚地看到差异

【讨论】:

    【解决方案2】:

    我能够做到这一点

    将此代码用于 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>
    

    【讨论】:

    • 你的 activity_main.xml 文件是什么?我可以看看吗?
    • 试过了,有效,谢谢!但我担心这可能会导致间距影响 onSetClickListener
    【解决方案3】:

    您尚未共享 layout_card_view.xml,但我认为这会起作用

    在你的 layout_card_view.xml 中添加 android:layout_gravity="center"

    希望对你有帮助

    【讨论】:

    • 它没有用。 GridLayoutManger 是否可能不是此代码?我应该改用 GridView 吗?
    • 尝试用相对布局包裹 CardView 并设置 android:layout_centerInParent="true"
    • 你能分享你的layout_card_view.xml
    • 是的,当我回复你时,我确实做到了。仍在寻找解决方案。也在寻找如何使用 BaseAdapters。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-05
    • 2016-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多