如何在RecyclerView中居中放置项目

时间:2019-12-01 16:35:13

标签: android android-recyclerview

我想要一个水平的RecyclerView,可以从中插入或删除其中的内容。这些项目应与中心对齐。而是将它们固定在左侧。

注意: 如其他问题所示,我无法使用android:layout_width=wrap_content,因为RV大小的更改会导致动画行为异常(即,项目滑入从“ RV外”移除项目)。

<androidx.recyclerview.widget.RecyclerView
        android:id="@+id/my_recycler_view"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@id/other_view"
        app:layout_constraintBottom_toTopOf="@id/another_view"/>


layoutManager = new 
LinearLayoutManager(getContext(),LinearLayoutManager.HORIZONTAL, false);        
recyclerView.setLayoutManager(layoutManager);
...
//updating the data on insert\remove: 
DiffUtil.DiffResult diffResult = DiffUtil.calculateDiff(
                            new MyCallback(newItems, oldItems));
diffResult.dispatchUpdatesTo(myAdapter);

...

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

  

如果没有其他可以与之共享空间的空间,请让您的RecyclerView宽度match_parent。

     

喜欢以下

<androidx.recyclerview.widget.RecyclerView
            android:id="@+id/recyclerView"
            android:padding="10dp"
            android:layout_marginBottom="20dp"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"/>
  

然后,您在适配器中使用的项目布局如下所示

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:background="@drawable/ic_card1"
    android:layout_width="match_parent"
    android:layout_marginBottom="10dp"
    android:layout_height="200dp"> <!--this can be any size-->

    <TextView
        style="@style/regularText"
        android:textColor="@color/white"
        android:textSize="15sp"
        android:text="@string/cardNumber"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>

</LinearLayout>
  

好处是,您的回收站视图每列仅呈现一个itemlayout,因此我们要做的是扩展项目布局以填充整个列。

     

有任何疑问吗?

     

OPP !!!我想我想念翻译您的问题!!! *

     

如果我确实误解了第一个答案,则为新答案

我认为您需要一个GridLayoutManager。

同时,您需要知道将连续显示的项目数量。