我正在开发一个使用RecyclerView
的安卓应用程序。我需要在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"
/>
发布于 2016-10-24 19:55:23
在2016年10月的更新中,支持库v25.0.0现在提供了基本水平和垂直分隔符的默认实现!
https://developer.android.com/reference/android/support/v7/widget/DividerItemDecoration.html
recyclerView.addItemDecoration(new DividerItemDecoration(recyclerView.getContext(), DividerItemDecoration.VERTICAL));
发布于 2015-07-06 18:13:37
正确的方法是为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);
发布于 2017-01-03 18:33:32
如果要同时使用水平分隔符和垂直分隔符:
下面是这个代码段的horizontal_divider.xmlvertical_divider.xml
可绘制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
https://stackoverflow.com/questions/31242812
复制相似问题