android - RecyclerView 在最后一项之后删除分隔符/装饰器

标签 android android-recyclerview divider

我有一个非常简单的 RecyclerView。
这就是我设置分隔线的方式:

DividerItemDecoration itemDecorator = new DividerItemDecoration(getContext(), DividerItemDecoration.VERTICAL);
itemDecorator.setDrawable(ContextCompat.getDrawable(getActivity(), R.drawable.news_divider));
recyclerView.addItemDecoration(itemDecorator);

这是drawable/news_divider.xml:

<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
    <solid android:color="@color/white_two"/>
    <size android:height="1dp"/>
</shape>

问题是由于某种原因,分隔线不仅仅是在项目之间创建的。但也在最后一项之后。而且我只希望它在项目之间而不是在每个项目之后。

知道如何防止分隔线在最后一项之后显示吗?

最佳答案

试试这个代码,它不会显示最后一项的分隔符。这种方法可以让您更好地控制绘图分隔线。

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);

关于android - RecyclerView 在最后一项之后删除分隔符/装饰器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46215810/

相关文章:

android - 对话框中的样式titleDivider

java - NoClassDefFoundError : android. support.v7.internal.view.menu.MenuBuilder

android - Kotlin 协程 : Note: end time exceeds epoch:

android - 如何搜索 Amazon Cognito 身份?

java - RecyclerView URL 重定向到 WebView (WebScraping)

android - 从 Activity 中隐藏 recyclerview 中的按钮,菜单不起作用

android - 如何在 android ListView 中删除页脚的底部分隔线

java - 如何在android应用程序中设置可点击的链接?

android - 带有 X 项的 Recyclerview 和查看更多按钮

html - 如何定位两个 <div>?一个来自 Bootstrap 模式的左侧,一个来自右侧?