2017-01-09 1 views
8

Ich baue eine Android-App, die RecyclerView verwendet. Ich möchte Teiler RecyclerView hinzuzufügen, die ich diesen Code nicht mit:Hinzufügen von Rändern zum Teiler in RecyclerView

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

Bisher funktioniert alles einwandfrei. Der Teiler nimmt jedoch die Größe des Vollbilds an und ich möchte ihm Ränder hinzufügen. Gibt es eine Möglichkeit, dass ich dem Teiler Ränder hinzufügen kann, indem ich eine Methode verwende, die dem gezeichneten Rechteck etwas Platz einräumt und nicht eine benutzerdefinierte Zeichnungsform mit Rändern erstellt und sie der RecyclerView hinzufügt?

+0

Verwenden Sie benutzerdefinierte dividerItemDecoration –

Antwort

7

Verwenden Sie dieses und passen Sie entsprechend Ihrer Anforderung an.

public class DividerItemDecoration extends RecyclerView.ItemDecoration { 

private static final int[] ATTRS = new int[]{android.R.attr.listDivider}; 

private Drawable divider; 

/** 
* Default divider will be used 
*/ 
public DividerItemDecoration(Context context) { 
    final TypedArray styledAttributes = context.obtainStyledAttributes(ATTRS); 
    divider = styledAttributes.getDrawable(0); 
    styledAttributes.recycle(); 
} 

/** 
* Custom divider will be used 
*/ 
public DividerItemDecoration(Context context, int resId) { 
    divider = ContextCompat.getDrawable(context, resId); 
} 

@Override 
public void onDraw(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 + divider.getIntrinsicHeight(); 

     divider.setBounds(left, top, right, bottom); 
     divider.draw(c); 
    } 
} 

}

+0

In meinem Fall ist es nur einmal nach dem letzten Element angezeigt. – Makalele

2

Sie können Ihre eigenen Artikel Dekoration für Recycler Ansicht erstellen. Hier ist Code für das gleiche.

public class SimpleItemDecorator extends RecyclerView.ItemDecoration { 

    int space; 
    boolean isHorizontalLayout; 
    public SimpleItemDecorator(int space) { 
     this.space = space; 
    } 

    public SimpleItemDecorator(int space, boolean isHorizontalLayout) { 
     this.space = space; 
     this.isHorizontalLayout = isHorizontalLayout; 
    } 

    @Override 
    public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) { 
     super.getItemOffsets(outRect, view, parent, state); 
     if(isHorizontalLayout) 
     { 
      outRect.bottom=space; 
      outRect.right=space; 
      outRect.left=space; 
      outRect.top=space; 

     } else { 
      outRect.bottom = space; 
      if (parent.getChildAdapterPosition(view) == 0) 
       outRect.top = space; 
      else 
       outRect.top = 0; 

     } 


    } 
} 

und mit Ihrem recyclerview verwenden Sie so tun können:

recyclerView.addItemDecoration(new SimpleItemDecorator(5)); 
3

Ich denke, die einfachste Lösung, um die setDrawable Methode auf dem Dekorationsobjekt zu verwenden ist und es einen Einsatz ziehbar Pass mit die eingegebenen Werte für die Ränder. Gefällt mir:

Verwandte Themen