带有 ItemDecoration 的 RecyclerView 分隔线宽度

Posted

技术标签:

【中文标题】带有 ItemDecoration 的 RecyclerView 分隔线宽度【英文标题】:RecyclerView divider width with ItemDecoration 【发布时间】:2019-02-25 10:45:01 【问题描述】:

我有一个 RecyclerView 并添加了一个 ItemDecoration 如下:-

mRecyclerView.addItemDecoration(new DividerItemDecoration(this, DividerItemDecoration.VERTICAL_LIST));

我的 ItemDecoration 看起来像:-

public void onDrawOver(Canvas c, RecyclerView parent, RecyclerView.State state)
    
        final int top = parent.getPaddingTop();
        final int bottom = parent.getHeight() - parent.getPaddingBottom();
        final int childCount = parent.getChildCount();
        for (int i = 0; i < childCount; i++)
        
            final View child = parent.getChildAt(i);
            final RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child.getLayoutParams();
            final int left = child.getRight() + params.rightMargin;
            final int right = left + mDivider.getIntrinsicHeight();
            mDivider.setBounds(left, top, right, bottom);
            mDivider.draw(c);
        

这会绘制一个占据整个屏幕宽度的分隔线。我想从大约 15dp(红线)的左右添加一点边距,使其看起来比屏幕宽度短,如下所示:-

我怎样才能做到这一点?任何建议表示赞赏。

【问题讨论】:

【参考方案1】:

看看getItemOffsets 方法。像下面这样的东西应该可以做到。

override fun getItemOffsets(
    rect: Rect,
    view: View,
    parent: RecyclerView,
    state: RecyclerView.State
) 
    rect.right = parent.right - yourMargin
    rect.left = parent.left + yourMargin

此方法将设置您将在其中绘制 (onDraw(...)) 装饰的矩形空间。

【讨论】:

【参考方案2】:

只要把值放在

    final int left = 200;
    final int right= 200;

【讨论】:

虽然此代码可能会回答问题,但提供有关此代码为何和/或如何回答问题的额外上下文可提高其长期价值。 @β.εηοιτ.βε 在这种情况下,我没有找到太多要解释的东西,但我以后一定会解决这个问题的。

以上是关于带有 ItemDecoration 的 RecyclerView 分隔线宽度的主要内容,如果未能解决你的问题,请参考以下文章

RecyclerView—— ItemDecoration

从头开始学 RecyclerView ItemDecoration 详解

RecyclerView ItemDecoration 完全解析

深入理解 RecyclerView 系列之一:ItemDecoration

用ItemDecoration实现按字母排序列表

为什么要使用ItemDecoration