【问题标题】:How can a divider line be added in an Android RecyclerView?如何在 Android RecyclerView 中添加分隔线?
【发布时间】:2015-09-23 10:05:49
【问题描述】:

我正在开发一个使用RecyclerView 的android 应用程序。我需要在RecyclerView 中添加一个分隔符。 我试图添加 -

recyclerView.addItemDecoration(new
     DividerItemDecoration(getActivity(),
       DividerItemDecoration.VERTICAL_LIST));

下面是我的 xml 代码 -

   <android.support.v7.widget.RecyclerView
    android:id="@+id/drawerList"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginTop="15dp"
    />

【问题讨论】:

标签: android android-recyclerview material-design


【解决方案1】:

所以这可能不是正确的方法,但我只是在 RecyclerView 的单个项目视图中添加了一个视图(因为我认为没有内置函数),如下所示:

<View
    android:layout_width="fill_parent"
    android:layout_height="@dimen/activity_divider_line_margin"
    android:layout_alignParentBottom="true"
    android:background="@color/tasklist_menu_dividerline_grey" />

这意味着每个项目将在其底部填充一条线。我用#111111 背景使它高约1dp。这也赋予了它一种“3D”的效果。

【讨论】:

  • --这不是办法
【解决方案2】:

yqritc 的RecyclerView-FlexibleDivider 使它成为一个单行。首先将此添加到您的build.gradle

compile 'com.yqritc:recyclerview-flexibledivider:1.4.0' // requires jcenter()

现在您可以在设置 recyclerView 的适配器的地方配置和添加一个 divder:

recyclerView.setAdapter(myAdapter);
recyclerView.addItemDecoration(new HorizontalDividerItemDecoration.Builder(this).color(Color.RED).sizeResId(R.dimen.divider).marginResId(R.dimen.leftmargin, R.dimen.rightmargin).build());

【讨论】:

  • @Gaurav,HorizontalDividerItemDecoration 类在哪里?
  • @iRuth,您需要将 maven 库添加到您的 .gradle 文件中github.com/yqritc/RecyclerView-FlexibleDivider
  • 这是一个不完整的答案。也许投反对票是合适的。
  • 值得一提的是,@gaurav-vachhani 需要 3-rd 方库
【解决方案3】:

正确的方法是为RecyclerView定义ItemDecoration如下

SimpleDividerItemDecoration.java

public class SimpleDividerItemDecoration extends RecyclerView.ItemDecoration {
    private Drawable mDivider;
 
    public SimpleDividerItemDecoration(Context context) {
        mDivider = ContextCompat.getDrawable(context, R.drawable.line_divider);
    }
 
    @Override
    public void onDrawOver(Canvas c, RecyclerView parent, RecyclerView.State state) {
        int left = parent.getPaddingLeft();
        int right = parent.getWidth() - parent.getPaddingRight();
 
        int childCount = parent.getChildCount();
        for (int i = 0; i < childCount; i++) {
            View child = parent.getChildAt(i);
 
            RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child.getLayoutParams();
 
            int top = child.getBottom() + params.bottomMargin;
            int bottom = top + mDivider.getIntrinsicHeight();
 
            mDivider.setBounds(left, top, right, bottom);
            mDivider.draw(c);
        }
    }
}

或者如果您使用的是 kotlin: SimpleDividerItemDecoration.kt

class SimpleDividerItemDecoration(context: Context, @DrawableRes dividerRes: Int) : ItemDecoration() {

    private val mDivider: Drawable = ContextCompat.getDrawable(context, dividerRes)!!

    override fun onDrawOver(c: Canvas, parent: RecyclerView) {
        val left = parent.paddingLeft
        val right = parent.width - parent.paddingRight
        val childCount = parent.childCount
        for (i in 0 until childCount) {
            val child: View = parent.getChildAt(i)
            val params = child.layoutParams as RecyclerView.LayoutParams
            val top: Int = child.bottom + params.bottomMargin
            val bottom = top + mDivider.intrinsicHeight
            mDivider.setBounds(left, top, right, bottom)
            mDivider.draw(c)
        }
    }
}
    

line_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/dark_gray" />
 
</shape>

终于这样设置了

recyclerView.addItemDecoration(new SimpleDividerItemDecoration(this));

编辑

@Alan Solitar 指出

context.getResources().getDrawable(R.drawable.line_divider); 

折旧而不是你可以使用的

ContextCompat.getDrawable(context,R.drawable.line_divider);

【讨论】:

  • context.getResources().getDrawable(R.drawable.line_divider) 现已弃用。
  • 没问题。这是一个很好的答案,它对我来说非常有效。谢谢。
  • 这非常适合我。但是,我想知道为什么不在每个单元格的布局中为此分隔符添加一个简单的 呢?它的代码少得多。这个解决方案的性能不好吗?交易
  • 如果您尝试滑动或移动项目,则会出现此实现的问题。
  • @NJ 谢谢老兄你节省了我的时间。
【解决方案4】:

只需在项目适配器末尾添加一个视图:

<View
 android:layout_width="match_parent"
 android:layout_height="1dp"
 android:background="#FFFFFF"/>

【讨论】:

  • 使用此解决方案,您还将获得列表末尾的分隔线。
  • 最后一行可以通过在 onBindViewHolder if(position == getItemCount() - 1) { mDividerView.setVisibility(View.INVISIBLE) } 中这样说来以编程方式删除,或者必须有其他方法来做到这一点。
  • 大多数时候,最后一行的高度为1px,我们的眼睛是看不见的
  • @LucasDiego 这行得通,但我们知道充气很昂贵。
  • 这不是最好的解决方案,因为它只有在 RecyclerView 中没有太多元素时才能正常工作。否则,不会为每个元素绘制视图。所以请使用 DividerItemDecoration。
【解决方案5】:

在 2016 年 10 月的更新中,支持库 v25.0.0 现在提供了基本水平和垂直分隔线的默认实现!

https://developer.android.com/reference/android/support/v7/widget/DividerItemDecoration.html

 recyclerView.addItemDecoration(new DividerItemDecoration(recyclerView.getContext(), DividerItemDecoration.VERTICAL));

【讨论】:

  • 您好,感谢您提供的信息!有没有办法在最后一项之后删除分隔线?我只有一个CardView,其中实现了List,底部cardview的分隔线+阴影看起来不太好!
  • 我遇到了同样的问题,并通过扩展 DividerItemDecoration 并覆盖 getItemOffsets 来解决它,然后仅在我不在第一个项目上时才调用 super。 if(parent.getChildAdapterPosition(view) == state.getItemCount() - 1) 然后返回,否则调用超类'getItemOffsets()
  • 我使用了DividerItemDecoration.VERTICAL,而不是mLayoutManager.getOrientation(),它起作用了,因为我的RecyclerView 是垂直的。
  • 有没有办法使用这种内置方式更改分隔线的颜色?
  • @V.Kalyuzhnyu @android:attr/listDivider 在应用程序主题中不显示分隔线,如果它是颜色资源,我必须使用我的颜色创建一个具有固定高度的可绘制形状。
【解决方案6】:

为了让 N J 的答案更简单,您可以这样做:

public class DividerColorItemDecoration extends DividerItemDecoration {

    public DividerColorItemDecoration(Context context, int orientation) {
        super(context, orientation);
        setDrawable(ContextCompat.getDrawable(context, R.drawable.line_divider));
    }
}

【讨论】:

    【解决方案7】:

    所有这些答案都让我很接近,但它们都缺少一个关键细节。经过一番研究,我发现最简单的方法是结合这 3 个步骤:

    1. 使用支持库的DividerItemDecoration
    2. 使用正确的颜色创建分隔线
    3. 在您的主题中将此分隔符设置为listDivider

    第 1 步:在配置 RecyclerView 时

    recyclerView.addItemDecoration(
            new DividerItemDecoration(context, layoutManager.getOrientation()));
    

    第 2 步:在 res/drawable/divider_gray.xml 之类的文件中

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

    第 3 步:在应用的主题中

    <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
        <!-- Other theme items above -->
        <item name="android:listDivider">@drawable/divider_gray</item>
    </style>
    

    编辑:更新为跳过最后一个分隔符:
    用了一点之后,我意识到它在最后一个项目之后画了一个分隔线,这很烦人。所以我修改了 Step 1 如下来覆盖 DividerItemDecoration 中的默认行为(当然,创建一个单独的类是另一种选择):

    recyclerView.addItemDecoration(
            new DividerItemDecoration(context, layoutManager.getOrientation()) {
                @Override
                public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
                    int position = parent.getChildAdapterPosition(view);
                    // hide the divider for the last child
                    if (position == parent.getAdapter().getItemCount() - 1) {
                        outRect.setEmpty();
                    } else {
                        super.getItemOffsets(outRect, view, parent, state);
                    }
                }
            }
    );
    

    【讨论】:

    • 覆盖 getItemOffsets 似乎对我不起作用。即使我覆盖并且从不调用 super,分隔线仍然被绘制。不确定发生了什么变化。
    • 这对我也不起作用。最后一个分隔线仍在显示。
    • 我最终通过复制 DividerItemDecoration 的源来创建自己的分隔器类,并稍微更改为不绘制最后一个分隔器。在绘图方法中,只需忽略最后一个子视图:for (int i = 0; i &lt; childCount; i++) 更改为for (int i = 0; i &lt; childCount - 1; i++)
    • 由于 ItemDecoration 是在列表项之前绘制的(“下”列表项),给定的解决方案仅在您的列表项具有 100% 不透明背景或装饰可绘制为 100% 透明时才有效(因此用户看到recyclerView 的背景)。否则,无论您在 getItemOffsets() 中返回什么,分隔线都是可见的
    【解决方案8】:

    如果你想同时拥有水平和垂直分隔线:

    1. 定义水平和垂直分隔可绘制对象:

      horizo​​ntal_divider.xml

      <?xml version="1.0" encoding="utf-8"?>
      <shape xmlns:android="http://schemas.android.com/apk/res/android" >
        <size android:height="1dip" />
        <solid android:color="#22000000" />
      </shape>
      

      vertical_divider.xml

      <?xml version="1.0" encoding="utf-8"?>
      <shape xmlns:android="http://schemas.android.com/apk/res/android" >
          <size android:width="1dip" />
          <solid android:color="#22000000" />
      </shape>
      
    2. 在下面添加这段代码:

      DividerItemDecoration verticalDecoration = new DividerItemDecoration(recyclerview.getContext(),
              DividerItemDecoration.HORIZONTAL);
      Drawable verticalDivider = ContextCompat.getDrawable(getActivity(), R.drawable.vertical_divider);
      verticalDecoration.setDrawable(verticalDivider);
      recyclerview.addItemDecoration(verticalDecoration);
      
      DividerItemDecoration horizontalDecoration = new DividerItemDecoration(recyclerview.getContext(),
              DividerItemDecoration.VERTICAL);
      Drawable horizontalDivider = ContextCompat.getDrawable(getActivity(), R.drawable.horizontal_divider);
      horizontalDecoration.setDrawable(horizontalDivider);
      recyclerview.addItemDecoration(horizontalDecoration);
      

    【讨论】:

    • 成功了。但是,如果您更改 horizo​​ntal_divider.xml 来划分宽度和 vertical_divider.xml 来划分高度,您可以像这样创建每个 DividerItemDecorationverticalDecoration = new DividerItemDecoration(recyclerview.getContext(), DividerItemDecoration.VERTICAL);horizontalDecoration = new DividerItemDecoration(recyclerview.getContext(), DividerItemDecoration.HORIZONTAL);
    【解决方案9】:

    不幸的是,Android 只是让小事情变得过于复杂。实现您想要的最简单的方法,无需在此处实现 DividerItemDecoration:

    将背景颜色添加到 RecyclerView 到您想要的分隔线颜色:

    <RecyclerView
        android:id="@+id/rvList"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:divider="@color/colorLightGray"
        android:scrollbars="vertical"
        tools:listitem="@layout/list_item"
        android:background="@android:color/darker_gray"/>
    

    将下边距(android:layout_marginBottom)添加到项目的布局根目录(list_item.xml):

    <RelativeLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_marginBottom="1dp">
    
        <TextView
            android:id="@+id/tvName"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="John Doe" />
    
        <TextView
            android:id="@+id/tvDescription"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@+id/tvName"
            android:text="Some description blah blah" />
    
    </RelativeLayout>
    

    这应该在项目和 RecyclerView 的背景颜色之间留出 1dp 的空间(深灰色将显示为分隔线)。

    【讨论】:

    • 这是在不添加额外代码行的情况下创建简单分隔线的最优雅方式
    【解决方案10】:

    这是一个简单的自定义分隔线的代码(垂直分隔线/1dp 高度/黑色):

    假设您有支持库:

    compile "com.android.support:recyclerview-v7:25.1.1"
    

    java代码

        DividerItemDecoration divider = new DividerItemDecoration(recyclerView.getContext(), DividerItemDecoration.VERTICAL);
        divider.setDrawable(ContextCompat.getDrawable(getBaseContext(), R.drawable.my_custom_divider));
        recyclerView.addItemDecoration(divider);
    

    然后是 custom_divider.xml 文件示例:

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

    【讨论】:

      【解决方案11】:

      res/drawable 文件夹中创建一个单独的 xml 文件

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

      主活动处连接那个xml文件(your_file),像这样:

      DividerItemDecoration divider = new DividerItemDecoration(
          recyclerView.getContext(),
          DividerItemDecoration.VERTICAL
      );
      divider.setDrawable(ContextCompat.getDrawable(getBaseContext(), R.drawable.your_file));
      recyclerView.addItemDecoration(divider);
      

      【讨论】:

      • 如何添加内边距?在形状中使用填充不起作用。
      【解决方案12】:

      我认为您正在使用Fragments 来拥有RecyclerView

      在创建 RecyclerViewLayoutManager 对象后添加这些行

      DividerItemDecoration dividerItemDecoration = new DividerItemDecoration(recyclerView.getContext(),
                      DividerItemDecoration.VERTICAL);
              recyclerView.addItemDecoration(dividerItemDecoration);
      

      就是这样!

      它同时支持水平和垂直方向。

      【讨论】:

        【解决方案13】:

        您需要添加下一行...

        mRecyclerView.addItemDecoration(new DividerItemDecoration(getContext(), DividerItemDecoration.VERTICAL));
        

        【讨论】:

          【解决方案14】:

          试试这个简单的单行代码

          recyclerView.addItemDecoration(new DividerItemDecoration(getContext(),LinearLayoutManager.VERTICAL)); 
          

          【讨论】:

            【解决方案15】:

            只需在 RecycleView Adapter 中的项目底部添加 x 数量的边距。

            onCreateViewHolder

            LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(
                            LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);
            
            layoutParams.setMargins(0, 0, 0, 5);
            itemView.setLayoutParams(layoutParams);
            

            【讨论】:

              【解决方案16】:

              您可以创建一个简单的可重复使用的分隔线。

              创建分隔线:

              public class DividerItemDecorator extends RecyclerView.ItemDecoration {
                  private Drawable mDivider;
              
                  public DividerItemDecorator(Drawable divider) {
                      mDivider = divider;
                  }
              
                  @Override
                  public void onDraw(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; 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 添加分隔符:

              RecyclerView.ItemDecoration dividerItemDecoration = new DividerItemDecorator(ContextCompat.getDrawable(context, R.drawable.divider));
              recyclerView.addItemDecoration(dividerItemDecoration);
              

              要删除最后一项的分隔符:

              为了防止为最后一项绘制分隔线,您必须更改此行。

              for (int i = 0; i < childCount; i++) 
              

              for (int i = 0; i < childCount-1; i++)
              

              你的最终实现应该是这样的:

              public class DividerItemDecorator extends RecyclerView.ItemDecoration {
                  private Drawable mDivider;
              
                  public DividerItemDecorator(Drawable divider) {
                      mDivider = divider;
                  }
              
                  @Override
                  public void onDraw(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 - 1; 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);
                      }
                  }
              }
              

              希望对你有帮助:)

              【讨论】:

              • 这很好用我不知道为什么它不是公认的答案
              【解决方案17】:
              recyclerview.addItemDecoration(new DividerItemDecoration(this, LinearLayoutManager.HORIZONTAL));
              

              对于垂直线使用 LinearLayoutManager.VERTICAL

              【讨论】:

              • 最好使用常量变量,因为该值可能会在支持库的未来版本中发生变化
              • true.. 我们应该使用 LinearLayoutManager.HORIZONTAL 或 LinearLayoutManager.VERTICAL 而不是 0 或 1
              【解决方案18】:

              Kotlin 版本:

              recyclerview.addItemDecoration(DividerItemDecoration(this, LinearLayoutManager.VERTICAL))
              

              【讨论】:

                【解决方案19】:

                我处理 Divider 视图和 Divider Insets 的方式是添加一个 RecyclerView 扩展。

                1.

                通过命名 View 或 RecyclerView 添加新的扩展文件:

                RecyclerViewExtension.kt
                

                并在 RecyclerViewExtension.kt 文件中添加 setDivider 扩展方法。

                /*
                * RecyclerViewExtension.kt
                * */
                import androidx.annotation.DrawableRes
                import androidx.core.content.ContextCompat
                import androidx.recyclerview.widget.DividerItemDecoration
                import androidx.recyclerview.widget.RecyclerView
                
                
                fun RecyclerView.setDivider(@DrawableRes drawableRes: Int) {
                    val divider = DividerItemDecoration(
                        this.context,
                        DividerItemDecoration.VERTICAL
                    )
                    val drawable = ContextCompat.getDrawable(
                        this.context,
                        drawableRes
                    )
                    drawable?.let {
                        divider.setDrawable(it)
                        addItemDecoration(divider)
                    }
                }
                

                2.

                drawable 包内创建一个Drawable 资源文件,如recycler_view_divider.xml

                <inset xmlns:android="http://schemas.android.com/apk/res/android"
                    android:insetLeft="10dp"
                    android:insetRight="10dp">
                
                    <shape>
                        <size android:height="0.5dp" />
                        <solid android:color="@android:color/darker_gray" />
                    </shape>
                
                </inset>
                

                您可以在其中指定android:insetLeftandroid:insetRight 的左右边距

                3.

                在初始化 RecyclerView 的 Activity 或 Fragment 上,您可以通过调用设置自定义可绘制对象:

                recyclerView.setDivider(R.drawable.recycler_view_divider)
                

                4.

                干杯?

                【讨论】:

                  【解决方案20】:
                    class ItemOffsetDecoration(
                          context: Context,
                          private val paddingLeft: Int,
                          private val paddingRight: Int
                      ) : RecyclerView.ItemDecoration() {
                          private var mDivider: Drawable? = null
                  
                          init {
                              mDivider = ContextCompat.getDrawable(context, R.drawable.divider_medium)
                          }
                  
                          override fun onDrawOver(c: Canvas, parent: RecyclerView, state: RecyclerView.State) {
                              val left = parent.paddingLeft + paddingLeft
                              val right = parent.width - parent.paddingRight - paddingRight
                              val childCount = parent.childCount
                              for (i in 0 until childCount) {
                                  val child = parent.getChildAt(i)
                                  val params = child.layoutParams as RecyclerView.LayoutParams
                                  val top = child.bottom + params.bottomMargin
                                  val bottom = top + (mDivider?.intrinsicHeight ?: 0)
                  
                                  mDivider?.let {
                                      it.setBounds(left, top, right, bottom)
                                      it.draw(c)
                                  }
                              }
                          }
                      }
                  

                  你只需要在 R.drawable.divider_medium 中指定一种颜色

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

                  并将其添加到您的 recyclerView

                  recyclerView.addItemDecoration(
                                          ItemOffsetDecoration(
                                              this,
                                              resources.getDimension(resources.getDimension(R.dimen.dp_70).roundToInt()).roundToInt(),
                                              0
                                          )
                                      )
                  

                  参考this

                  【讨论】:

                    【解决方案21】:

                    Bhuvanesh BS 解决方案有效。 Kotlin 版本:

                    import android.graphics.Canvas
                    import android.graphics.drawable.Drawable
                    import androidx.recyclerview.widget.RecyclerView
                    
                    class DividerItemDecorator(private val mDivider: Drawable?) : RecyclerView.ItemDecoration() {
                    
                        override fun onDraw(
                            canvas: Canvas,
                            parent: RecyclerView,
                            state: RecyclerView.State
                        ) {
                    
                            val dividerLeft = parent.paddingLeft
                            val dividerRight = parent.width - parent.paddingRight
                            for (i in 0 until parent.childCount - 1) {
                                val child = parent.getChildAt(i)
                                val dividerTop =
                                    child.bottom + (child.layoutParams as RecyclerView.LayoutParams).bottomMargin
                                val dividerBottom = dividerTop + mDivider!!.intrinsicHeight
                                mDivider.setBounds(dividerLeft, dividerTop, dividerRight, dividerBottom)
                                mDivider.draw(canvas)
                            }
                        }
                    }
                    

                    【讨论】:

                      【解决方案22】:

                      我认为这是最简单的方法

                      mDividerItemDecoration = new DividerItemDecoration(recyclerView.getContext(),
                                      DividerItemDecoration.VERTICAL);
                      // or DividerItemDecoration.HORIZONTALL
                              mDividerItemDecoration.setDrawable(getDrawable(R.drawable.myshape));
                              recyclerView.addItemDecoration(mDividerItemDecoration);
                      

                      请注意: myshape 可以是矩形,高度是您想要的分隔符

                      【讨论】:

                        【解决方案23】:

                        好的,如果不需要更改分隔线颜色,只需将 alpha 应用于分隔线装饰。

                        具有透明度的 GridLayoutManager 示例:

                        DividerItemDecoration horizontalDividerItemDecoration = new DividerItemDecoration(WishListActivity.this,
                                        DividerItemDecoration.HORIZONTAL);
                                horizontalDividerItemDecoration.getDrawable().setAlpha(50);
                                DividerItemDecoration verticalDividerItemDecoration = new DividerItemDecoration(WishListActivity.this,
                                        DividerItemDecoration.VERTICAL);
                                verticalDividerItemDecoration.getDrawable().setAlpha(50);
                                my_recycler.addItemDecoration(horizontalDividerItemDecoration);
                                my_recycler.addItemDecoration(verticalDividerItemDecoration);
                        

                        您仍然可以通过设置颜色来更改分隔线的颜色 过滤到它。

                        GridLayoutManager 设置色调的示例:

                        DividerItemDecoration horizontalDividerItemDecoration = new DividerItemDecoration(WishListActivity.this,
                                        DividerItemDecoration.HORIZONTAL);
                                horizontalDividerItemDecoration.getDrawable().setTint(getResources().getColor(R.color.colorAccent));
                                DividerItemDecoration verticalDividerItemDecoration = new DividerItemDecoration(WishListActivity.this,
                                        DividerItemDecoration.VERTICAL);
                                verticalDividerItemDecoration.getDrawable().setAlpha(50);
                                my_recycler.addItemDecoration(horizontalDividerItemDecoration);
                                my_recycler.addItemDecoration(verticalDividerItemDecoration);
                        

                        另外你也可以尝试设置颜色滤镜,

                         horizontalDividerItemDecoration.getDrawable().setColorFilter(colorFilter);
                        

                        【讨论】:

                          【解决方案24】:

                          KOTLIN - 如果您正在寻找回收站视图项目之间的自定义颜色分隔线,那么这里是适合我的解决方案:

                          第 1 步:为您的回收站视图提供默认的项目装饰。 recyclerView.addItemDecoration(androidx.recyclerview.widget.DividerItemDecoration(activity, androidx.recyclerview.widget.LinearLayoutManager.VERTICAL))

                          第 2 步: 添加一个 xml 可绘制对象,指定大小 - 宽度和高度以及您想要的颜色。

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

                          第 3 步:在您的应用主题中添加这一行。

                          <item name="android:listDivider">@drawable/your_drawable</item>
                          

                          【讨论】:

                            猜你喜欢
                            • 2017-02-01
                            • 1970-01-01
                            • 2017-07-14
                            • 2023-03-25
                            • 1970-01-01
                            • 2017-05-23
                            • 1970-01-01
                            • 1970-01-01
                            • 1970-01-01
                            相关资源
                            最近更新 更多