2016-09-18 66 views
0

如何用分隔线制作RecyclerView?如何用分隔线制作RecyclerView

我的RecyclerView看起来像这样。

enter image description here

我想达到RecyclerView,看起来像这样:

enter image description here

我怎样才能做到这一点?

item_row XML:

<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:card_view="http://schemas.android.com/apk/res-auto" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:background="?android:selectableItemBackground" > 

    <TextView 
     android:id="@+id/rvname" 
     android:layout_width="match_parent" 
     android:layout_height="45dp" 
     android:gravity="left" 
     android:padding="10dp" 
     android:textAlignment="center" 
     android:text="Name" 
     android:textColor="@android:color/black" 
     /> 

    </RelativeLayout> 

activity_main XML:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tools:context="com.luminous.pick.FlipActivity"> 


    <android.support.v7.widget.RecyclerView 
     android:id="@+id/recyclerView" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"> 
    </android.support.v7.widget.RecyclerView> 

</RelativeLayout> 
+0

add please xml f iles你的布局 – piotrek1543

+0

@ piotrek1543我更新了我的帖子。 –

+0

只需从行项目 –

回答

3

你回收观点看起来是因为你的recyclerview_item.xml它有CardView。所以只需删除它们。

答案更新:

要创建项目的潜水员,你应该做到以下几点

创建DividerItemDecoration类

public class DividerItemDecoration extends RecyclerView.ItemDecoration { 


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

public static final int HORIZONTAL_LIST = LinearLayoutManager.HORIZONTAL; 

public static final int VERTICAL_LIST = LinearLayoutManager.VERTICAL; 

private Drawable mDivider; 

private int mOrientation; 

public DividerItemDecoration(Context context, int orientation) { 
    final TypedArray a = context.obtainStyledAttributes(ATTRS); 
    mDivider = a.getDrawable(0); 
    a.recycle(); 
    setOrientation(orientation); 
} 

public void setOrientation(int orientation) { 
    if (orientation != HORIZONTAL_LIST && orientation != VERTICAL_LIST) { 
     throw new IllegalArgumentException("invalid orientation"); 
    } 
    mOrientation = orientation; 
} 

@Override 
public void onDrawOver(Canvas c, RecyclerView parent, RecyclerView.State state) { 

    if (mOrientation == VERTICAL_LIST) { 
     drawVertical(c, parent); 
    } else { 
     drawHorizontal(c, parent); 
    } 
} 

public void drawVertical(Canvas c, RecyclerView parent) { 
    final int left = parent.getPaddingLeft(); 
    final int right = parent.getWidth() - parent.getPaddingRight(); 

    final int childCount = parent.getChildCount(); 
    for (int i = 0; i < childCount; i++) { 
     final View child = parent.getChildAt(i); 

     final RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child 
       .getLayoutParams(); 
     final int top = child.getBottom() + params.bottomMargin; 
     final int bottom = top + mDivider.getIntrinsicHeight(); 
     mDivider.setBounds(left, top, right,bottom); 

     mDivider.draw(c); 
    } 
} 

public void drawHorizontal(Canvas c, RecyclerView parent) { 
    final int top = parent.getPaddingTop(); 
    final int bottom = parent.getHeight() - parent.getPaddingBottom(); 

    final int childCount = parent.getChildCount(); 
    for (int i = 0; i < childCount; i++) { 
     final View child = parent.getChildAt(i); 
     Log.i("LOH", "drawHorizontal: "+ parent.getChildViewHolder(child).getItemViewType()); 
     final RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child 
       .getLayoutParams(); 
     final int left = child.getRight() + params.rightMargin; 
     final int right = left + mDivider.getIntrinsicHeight(); 
     mDivider.setBounds(left, top, right, bottom); 
     mDivider.draw(c); 
    } 
} 

@Override 
public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) { 
    if (mOrientation == VERTICAL_LIST) { 
     outRect.set(0, 0, 0, mDivider.getIntrinsicHeight()); 
    } else { 
     outRect.set(0, 0, mDivider.getIntrinsicWidth(), 0); 
    } 
}} 

与RecyclerView片段/活动请执行以下操作:

mRecyclerView.setLayoutManager(new LinearLayoutManager(getActivity())); 
    mRecyclerView.addItemDecoration(new DividerItemDecoration(getActivity(), LinearLayoutManager.VERTICAL)); 
+0

中删除此行'android:background =“?android:selectableItemBackground”'它可以工作,但是如何在两个recyclerview之间添加分隔符? –

+0

@ChristineRamos你是指回收者查看项目之间的意思吗? –

+0

是的。我更新了上面的图片。 –