Monday, January 30, 2017

Divider in RecyclerView with ItemDecoration - Android


1. Create class DividerItemDecoration.java
 package com.nikshit.Utilities;  
 import android.graphics.Canvas;  
 import android.graphics.Rect;  
 import android.graphics.drawable.Drawable;  
 import android.support.v7.widget.RecyclerView;  
 import android.view.View;  
 public class DividerItemDecoration extends RecyclerView.ItemDecoration{  
   private Drawable mDivider;  
   public DividerItemDecoration(Drawable divider) {  
     mDivider = divider;  
   }  
   @Override  
   public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {  
     super.getItemOffsets(outRect, view, parent, state);  
     if (parent.getChildAdapterPosition(view) == 0) {  
       return;  
     }  
     outRect.top = mDivider.getIntrinsicHeight();  
   }  
   @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);  
     }  
   }  
 }  
2. Create divider.xml
 <?xml version="1.0" encoding="utf-8"?>  
 <shape xmlns:android="http://schemas.android.com/apk/res/android" >  
   <size android:height=".5dip" />  
   <solid android:color="@android:color/darker_gray" />  
 </shape>  
3. Add lines below where you have defined RecyclerView
 RecyclerView.ItemDecoration dividerItemDecoration = new DividerItemDecoration(getResources().getDrawable(R.drawable.divider));  
        mRVFishPrice.addItemDecoration(dividerItemDecoration);  

No comments :

Post a Comment