首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在Android RecyclerView中添加分隔线?

如何在Android RecyclerView中添加分隔线?
EN

Stack Overflow用户
提问于 2015-07-06 17:57:09
回答 24查看 225.4K关注 0票数 250

我正在开发一个使用RecyclerView的安卓应用程序。我需要在RecyclerView中添加一个除法器。我试着加了-

代码语言:javascript
复制
recyclerView.addItemDecoration(new
     DividerItemDecoration(getActivity(),
       DividerItemDecoration.VERTICAL_LIST));

下面是我的xml代码-

代码语言:javascript
复制
   <android.support.v7.widget.RecyclerView
    android:id="@+id/drawerList"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginTop="15dp"
    />
EN

回答 24

Stack Overflow用户

发布于 2016-10-24 19:55:23

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

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

代码语言:javascript
复制
 recyclerView.addItemDecoration(new DividerItemDecoration(recyclerView.getContext(), DividerItemDecoration.VERTICAL));
票数 319
EN

Stack Overflow用户

发布于 2015-07-06 18:13:37

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

SimpleDividerItemDecoration.java

代码语言:javascript
复制
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

代码语言:javascript
复制
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:

代码语言:javascript
复制
<?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>

最终将其设置为这样的

代码语言:javascript
复制
recyclerView.addItemDecoration(new SimpleDividerItemDecoration(this));

编辑

正如@Alan Solitar所指出的

代码语言:javascript
复制
context.getResources().getDrawable(R.drawable.line_divider); 

是折旧的而不是你可以使用的

代码语言:javascript
复制
ContextCompat.getDrawable(context,R.drawable.line_divider);
票数 240
EN

Stack Overflow用户

发布于 2017-01-03 18:33:32

如果要同时使用水平分隔符和垂直分隔符:

  1. 定义水平和垂直分隔线可绘制内容:

下面是这个代码段的horizontal_divider.xmlvertical_divider.xml

  • Add:

可绘制DividerItemDecoration.HORIZONTAL= verticalDecoration.setDrawable(verticalDivider);recyclerview.addItemDecoration(verticalDecoration);DividerItemDecoration(recyclerview.getContext(),DividerItemDecoration.HORIZONTAL);可绘制verticalDivider = ContextCompat.getDrawable(getActivity(),R.drawable.vertical_divider);可绘制DividerItemDecoration horizontalDecoration =新DividerItemDecoration(recyclerview.getContext(),R.drawable.vertical_divider);可绘制DividerItemDecoration horizontalDecoration= ContextCompat.getDrawable(getActivity(),R.drawable.horizontal_divider);可绘制DividerItemDecoration.VERTICAL

票数 43
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31242812

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档