如何在线性布局RecyclerView中缩进分隔符(即,仅向ItemDecoration添加填充,边距或插入)

Sur*_*gch 8 android android-recyclerview

根据这个答案,我能够在垂直RecyclerView的项目之间得到一个分隔符.但是,我也想稍微缩进分隔线.

我能够通过在RecyclerView.ItemDecoration子类中的INDENT值中进行硬编码来实现.

int INDENT = 20;

@Override
public void onDraw(Canvas c, RecyclerView parent, RecyclerView.State state) { 

    int left = parent.getPaddingLeft() + INDENT;
    int right = parent.getWidth() - parent.getPaddingRight() - INDENT;

    // ...

        divider.setBounds(left, top, right, bottom);

    // ...
} 
Run Code Online (Sandbox Code Playgroud)

然而,那时我不得不混淆密度无关的像素.

我终于找到了一个类似于ListView的解决方案,所以我在下面分享这个答案.

Sur*_*gch 27

使用 inset

绘制/ my_divider.xml

<inset xmlns:android="http://schemas.android.com/apk/res/android"
       android:insetLeft="40dp"
       android:insetRight="40dp" >

    <shape>
        <size android:height="1dp"/>
        <solid android:color="@color/recyclerview_divider" />
    </shape>

</inset>
Run Code Online (Sandbox Code Playgroud)

使用如此答案中所示的获取资源ID的构造函数,我们可以提供自定义divider xml文件的id.

recyclerView.addItemDecoration(
        new DividerItemDecoration(getActivity(), R.drawable.my_divider));
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

  • 当我这样做时,我收到此错误“无效方向。它应该是 HORIZONTAL 或 VERTICAL” (3认同)
  • 谢谢!绝对胜过我见过的所有其他令人费解的答案。 (2认同)
  • 在我能找到的所有解决方案中,三年后,这一解决方案仍然优越。请注意,今天的除法器构造器的实例化仅允许将第二个参数用作方向值,您必须在通过`dividerItemDecorationInstance.setDrawable(drawable)实例化后设置自定义Drawable。 (2认同)