Simple Horizontal Divider Item Decoration for RecyclerView
mRecyclerView.addItemDecoration(new SimpleDividerItemDecoration(
getApplicationContext()
));
NOTE: Add item decoration prior to setting the adapter
<?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> |
public class SimpleDividerItemDecoration extends RecyclerView.ItemDecoration { | |
private Drawable mDivider; | |
public SimpleDividerItemDecoration(Context context) { | |
mDivider = context.getResources().getDrawable(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); | |
} | |
} | |
} |
it works
thanks alot
Works perfectly. Thank you
Good
I think custom drawable is not work
Hello,
Maybe use
ContextCompat
public SimpleDividerItemDecoration(Context context) { mDivider = ContextCompat.getDrawable(context, R.drawable.line_divider); }
Thanks a lot
Thanks,It worked!!
https://developer.android.com/reference/android/support/v7/widget/DividerItemDecoration.html
val linearLayoutManager = LinearLayoutManager(this)
val dividerItemDecoration = DividerItemDecoration(recyclerView.context, linearLayoutManager.orientation)
// Init recyclerView
recyclerView.setHasFixedSize(true)
recyclerView.layoutManager = linearLayoutManager
recyclerView.addItemDecoration(dividerItemDecoration)
Use "card view" for item layout and set "margin top" according to your requirement.
:)
It works beauty... Thanks!
If you don't want the last item to have a divider line after it, simply change for (int i = 0; i < childCount; i++) {
to for (int i = 0; i < childCount - 1; i++) {
and it will skip the last item divider.
Tried many, but this works like magic.
Thanks