如何在Android中移除RecyclerView项之间的分隔线

17

我想要移除RecyclerView中item之间的分割线(空格)。

尝试将item view和RecyclerView的background设置为White,但并没有起作用。如何解决?

Item View的XML代码:

<android.support.v7.widget.CardView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:background="@android:color/white"
    android:orientation="vertical"
    android:layout_width="wrap_content"
    android:layout_height="match_parent">
    <LinearLayout
        android:background="@android:color/white"
        android:paddingLeft="@dimen/footer_item_padding"
        android:paddingRight="@dimen/footer_item_padding"
        android:orientation="vertical"
        android:gravity="center"
        android:layout_width="wrap_content"
        android:layout_height="match_parent">
        <ImageView
            android:id="@+id/img_avatar_category_item_adapter"
            android:contentDescription="@string/app_name"
            android:adjustViewBounds="true"
            android:scaleType="fitXY"
            android:layout_width="@dimen/image_width_category_adapter"
            android:layout_height="wrap_content"/>
    </LinearLayout>
</android.support.v7.widget.CardView>

活动XML:

        <android.support.v7.widget.RecyclerView
            android:id="@+id/rv_categories_main_activity"
            android:background="@android:color/white"
            android:layout_width="match_parent"
            android:layout_height="match_parent"/>

Activity类:

    rv_categories.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, false));
    rv_categories.setItemAnimator(new DefaultItemAnimator());

enter image description here


1
移除 android:paddingLeft="@dimen/footer_item_padding" 和 android:paddingRight="@dimen/footer_item_padding"。 - tiny sunlight
5个回答

24

首先,定义你的RecyclerView:

RecyclerView recycle = (RecyclerView) findViewById(R.id.recyclerView);

然后在你的活动中使用这个方法:

recycle.addItemDecoration(new DividerItemDecoration(context, 0));

我们能否直接在XML中删除它而不是移除它? - zulkarnain shah
7
这将横向设置分隔符,但不完全删除分隔符。 - Roberto
在这里使用LinearLayout.SHOW_DIVIDER_NONE比0更有意义。 - Lahiru Pinto

9

您可以使用 DividerItemDecoration 类并重写它的 onDraw 方法,使其不执行任何操作,如下所示:

mRecyclerView.addItemDecoration(new DividerItemDecoration(mContext, LinearLayoutManager.VERTICAL) {
        @Override
        public void onDraw(Canvas c, RecyclerView parent, RecyclerView.State state) {
            // Do not draw the divider
        }
    });

终于,我找到了一个解决方案:D - Tefa
2
如果我们只想为某些行进行绘制,而不是所有行,该怎么办? - lostintranslation
@lostintranslation 我建议你在 RecyclerView 上使用方法 getChildAt() 来获取可见 View。然后使用从前一步中获取的 View 作为参数调用 getChildAdapterPosition()。根据你得到的位置值,为这个特定的视图应用你的绘制逻辑。那么传递给 getChildAt() 什么呢?我想创建一个从0到该方法返回 null 的 while 循环将会解决问题。 - Sevastyan Savanyuk

6

出于某种原因,其他答案对我无效,但这个解决方法有效:

for (int i = 0; i < recyclerView.getItemDecorationCount(); i++) {
    if (recyclerView.getItemDecorationAt(i) instanceof DividerItemDecoration)
        recyclerView.removeItemDecorationAt(i);
}

移除水平和垂直分隔线。谢谢。 - Mahmut K.

1
请勿在您的代码中使用以下代码行,它会解决问题:
groceryRecyclerView.addItemDecoration(new DividerItemDecoration(getActivity(), LinearLayoutManager.HORIZONTAL));
或者
recycle.addItemDecoration(new DividerItemDecoration(context, 0));

3
只有移除代码才有效。将值设为0并不能移除分隔线。我已经测试过了。 - Christopher Smit
这是对问题的回答。应该被勾选。 - Muhammad Faheem Mohd Ezani

-1

添加

android:divider="@null"
android:dividerHeight="0dp"

到recyclerView的xml文件中。


没有这样的属性。 - Ammar ali

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接