当前位置: 首页 > 知识库问答 >
问题:

RecyclerView在最后一个项目之后删除分隔器/装饰器

施永宁
2023-03-14
DividerItemDecoration itemDecorator = new DividerItemDecoration(getContext(), DividerItemDecoration.VERTICAL);
itemDecorator.setDrawable(ContextCompat.getDrawable(getActivity(), R.drawable.news_divider));
recyclerView.addItemDecoration(itemDecorator);
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
    <solid android:color="@color/white_two"/>
    <size android:height="1dp"/>
</shape>

有没有办法防止分割器显示在最后一个项目之后?

共有1个答案

阚英睿
2023-03-14

试试这段代码,它不会显示最后一项的分隔符。这个方法将给你更多的控制绘图分割器。

public class DividerItemDecorator extends RecyclerView.ItemDecoration {
    private Drawable mDivider;

    public DividerItemDecorator(Drawable divider) {
        mDivider = divider;
    }

    @Override
    public void onDrawOver(Canvas canvas, RecyclerView parent, RecyclerView.State state) {
        int dividerLeft = parent.getPaddingLeft();
        int dividerRight = parent.getWidth() - parent.getPaddingRight();

        int childCount = parent.getChildCount();
        for (int i = 0; i <= childCount - 2; i++) {
            View child = parent.getChildAt(i);

            RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child.getLayoutParams();

            int dividerTop = child.getBottom() + params.bottomMargin;
            int dividerBottom = dividerTop + mDivider.getIntrinsicHeight();

            mDivider.setBounds(dividerLeft, dividerTop, dividerRight, dividerBottom);
            mDivider.draw(canvas);
        }
    }
}

divider.xml:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <size
        android:width="1dp"
        android:height="1dp" />
    <solid android:color="@color/grey_300" />
</shape>

这样设置分割器:

RecyclerView.ItemDecoration dividerItemDecoration = new DividerItemDecorator(ContextCompat.getDrawable(context, R.drawable.divider));
recyclerView.addItemDecoration(dividerItemDecoration);
 类似资料:
  • 删除项目后,“我的回收器”视图未更新。此recyclerView位于片段内部。我试过各种方法,但都不管用。 片段类中的适配器声明 回收服务适配器: } 调试项目时,我可以看到该项实际上正在从ArrayList中删除。但不在循环视图中更新。 删除后,如果滚动回收站视图,则从回收站视图中删除已删除的项。但不是没有滚动。

  • 下面是我如何为RecyclerView项目设置间距。它被设计用于网格和列表。间隔很有效。 我搞不懂的是如何插入分隔线。如有任何帮助,我们将不胜感激。 旁注:如果你有比我现在做的更好的方法来实现间距,我会非常感激:) 下面是我想要做的一个快速视觉效果: 以下是我所知道的: 这是我想要的:

  • 我正在尝试删除空列项目装饰,如下图所示。我最初想在注释中使用下面的代码根据内容限制最后一行的跨距计数,但我没有成功。 以下是代码和图像的结果。 当我取消注释代码并运行应用程序时,结果如下: 任何代码参考或链接都会有所帮助。提前感谢。

  • 我在我的列表视图中添加了一个可绘制的分隔线,但它出现在除最后一项之外的所有项目中。 我在列表中只有5个项目,所以在最后一个项目之后都是空白,我想在最后一项之后也有一个分隔符 我试过这个: 在我的列表视图中。但它不起作用 非常感谢。

  • 问题内容: 这是一种对整数数组进行排序的方法。如何从输出中删除最后一个分隔符? 输出量 期望的输出 问题答案: 如果您使用的是Java 8,则非常干净的解决方案是使用新类。此类旨在将Strings与自定义分隔符(可能还带有前缀/后缀)连接在一起。使用此类,您无需担心像在代码段中一样删除最后一个分隔符。 您还可以删除循环并改用Streams:

  • 我想得到下图所示的除法器: 我希望所有列的宽度相同,但行间距不同。现在我的第一列和最后一列被剪成这样: 以下是我的< code>ItemDecoration: 我怎样才能解决这个问题?谢谢