Como adicionar divisórias e espaços entre os itens em RecyclerView ?

? EyesClear @ | Original: StackOverFlow
---

Este é um exemplo de como isso poderia ter sido feito anteriormente na classe ListView, usando os parâmetros de divisor e 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"/>

No entanto, não vejo essa possibilidade no RecyclerView class .

<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"/>

Nesse caso, é ok para definir as margens e / ou adicione uma vista divisor de costume diretamente no layout de um item da lista ou se existe uma maneira melhor de alcançar meu objetivo ?

---

Top 5 Responder

1Duy Nguyen @

Posso direcionar sua atenção para este arquivo em particular no Github por Alex Fu:  https://gist.github.com/alexfu/0f464fc3742f134ccd1e

É o arquivo exemplo DividerItemDecoration.java "puxado diretamente das demonstrações de apoio " . ( Https://plus.google.com/103498612790395592106/posts/VVEB3m7NkSS )

Eu era capaz de conseguir linhas divisórias bem depois de importar este arquivo no meu projeto e adicioná-lo como um item de decoração para a exibição reciclador.

Aqui está como o meu onCreateView parecido na minha fragmento contendo o 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;
}

Tenho certeza de styling adicional pode ser feito, mas é um ponto de partida. :)

2EyesClear @

Me deparei com https://github.com/lucasr/twoway-view que é suposto para simplificar o processo de decoração item.

Entre seus https://github.com/lucasr/twoway-view#features é:

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

Se for apenas espaçamento a única coisa que você precisa fazer é adicionar algumas margens para seu layout artigo

4Kevin Grant @

Isto realmente não resolver o problema, mas como uma solução temporária, você pode definir o https://developer.android.com/reference/android/support/v7/widget/CardView.html#attr_android.support.v7.cardview:cardUseCompatPadding propriedade no cartão em seu layout XML para torná-lo medir o mesmo que ele faz em versões pré- pirulito .

card_view:cardUseCompatPadding="true"
5SergeyA @

Implementação ItemDecoration simples para espaços iguais entre todos os itens.

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;
    }
}