Come aggiungere divisori e gli spazi tra gli elementi in RecyclerView ?

? EyesClear @ | Original: StackOverFlow
---

Questo è un esempio di come potrebbe essere stato fatto in precedenza nella classe ListView, utilizzando i parametri divisore 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"/>

Tuttavia, non vedo questa possibilità nella classe 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"/>

In tal caso, è ok per definire i margini e / o aggiungere una vista divisore personalizzato direttamente in il layout di una voce di elenco o c'è un modo migliore per raggiungere il mio obiettivo ?

---

Top 5 Risposta

1Duy Nguyen @

Potrei dirigere la vostra attenzione su questo particolare file su Github di Alex Fu :  https://gist.github.com/alexfu/0f464fc3742f134ccd1e

E ' il file esempio DividerItemDecoration.java " tirato direttamente dalla demo di supporto " . ( Https://plus.google.com/103498612790395592106/posts/VVEB3m7NkSS )

Sono stato in grado di ottenere le linee divisorie bene dopo l'importazione del file nel mio progetto e aggiungerlo come una decorazione oggetto alla vista riciclatore .

Ecco come il mio onCreateView assomigliare a mio frammento contenente il 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;
}

Sono sicuro che lo styling aggiuntivo può essere fatto, ma è un punto di partenza . :)

2EyesClear @

Mi sono imbattuto in https://github.com/lucasr/twoway-view che dovrebbe semplificare il processo di decorazione voce .

Tra i suoi https://github.com/lucasr/twoway-view#features è :

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

Se si tratta solo di spaziatura l'unica cosa che dovete fare è aggiungere alcuni margini per il layout voce

4Kevin Grant @

Questo in realtà non risolve il problema, ma come una soluzione temporanea, è possibile impostare il https://developer.android.com/reference/android/support/v7/widget/CardView.html#attr_android.support.v7.cardview:cardUseCompatPadding proprietà sulla carta nel layout XML per renderlo misurare la stessa come avviene nelle versioni pre - Lollipop .

card_view:cardUseCompatPadding="true"
5SergeyA @

Implementazione ItemDecoration semplice per spazi uguali tra tutti gli elementi .

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