Как добавить разделители и пробелы между элементами в RecyclerView ?

? EyesClear @ | Original: StackOverFlow
---

Этопример того, как можно было бы сделать ранее в классе ListView, используя разделитель и dividerHeight параметры:

<ListView
    android:id="@+id/activity_home_list_view"
    android:layout_width="match_parent" 
    android:layout_height="match_parent"
    android:divider="@android:color/transparent"
    android:dividerHeight="8dp"/>

Тем не менее, я не вижу такой возможности в классе RecyclerView .

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

В этом случае, это нормально, чтобы определить прибыли и / или добавить настраиваемое представление делителя непосредственно в макетеэлемента списка или естьлучший способ достичь своей цели?

---

Top 5 ответ

1Duy Nguyen @

Могу я обратить ваше внимание на этом конкретном файле на Github Алекс -фу :  https://gist.github.com/alexfu/0f464fc3742f134ccd1e

Этопример файла DividerItemDecoration.java " вытащил прямо из опорных демо " . ( Https://plus.google.com/103498612790395592106/posts/VVEB3m7NkSS )

Я был в состоянии получить разделительные линии хорошо после импорта этого файла в моем проекте и добавить его в качестве элемента декора в целях повторным использованием .

Вот как моя onCreateView выглядеть в моей фрагмент, содержащий Recyclerview :

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View rootView = inflater.inflate(R.layout.fragment_recycler_view, container, false);

    mRecyclerView = (RecyclerView) rootView.findViewById(R.id.my_recycler_view);
    mRecyclerView.addItemDecoration(new DividerItemDecoration(getActivity(), DividerItemDecoration.VERTICAL_LIST));

    mRecyclerView.setHasFixedSize(true);
    mLayoutManager = new LinearLayoutManager(getActivity());
    mRecyclerView.setLayoutManager(mLayoutManager);
    mRecyclerView.setItemAnimator(new DefaultItemAnimator());

    return rootView;
}

Я уверен, что дополнительная укладка может быть сделано, но этоотправная точка. :)

2EyesClear @

Я наткнулся на https://github.com/lucasr/twoway-view который должен упростить процесс декорации элемента.

Среди его https://github.com/lucasr/twoway-view#features является :

A collection of stock item decorations including: Item spacing Horizontal/vertical dividers. List item 3Krzysztof Dubrowski @

Если это просто интервал единственное, что вам нужно сделать, это добавить некоторые поля с расположением пункт

4Kevin Grant @

Это на самом деле не решает проблему, но как временное решение, вы можете установить https://developer.android.com/reference/android/support/v7/widget/CardView.html#attr_android.support.v7.cardview:cardUseCompatPadding недвижимость на карте в макете XML, чтобы сделать его измеритьтак же, как это делает на предварительно Lollipop версий.

card_view:cardUseCompatPadding="true"
5SergeyA @

Простая реализация ItemDecoration за равные промежутки между всем пунктам .

public class SpacesItemDecoration extends RecyclerView.ItemDecoration {
    private int space;

    public SpacesItemDecoration(int space) {
        this.space = space;
    }

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

        // Add top margin only for the first item to avoid double space between items
        if(parent.getChildPosition(view) == 0)
            outRect.top = space;
    }
}