2016-05-29 28 views
28

Ciao Sto seguendo questo tutorialMargine tra gli elementi in vista riciclatore Android

http://www.journaldev.com/10024/android-recyclerview-and-cardview-example-tutorial

Ora sto affrontando un problema strano il margine tra ogni elemento CardView vista interna riciclatore è troppo.

EMISSIONE

Come ridurre il margine tra ogni elemento di CardView collocato all'interno di vista riciclatore.

enter image description here

+0

Qualsiasi aiuto sarebbe apprezzato –

+0

vedere la mia risposta qui sotto. – Ironman

risposta

51

ho affrontato problema simile, con RelativeLayout come elemento principale per ogni riga del recyclerview.

Per risolvere il problema, trovare il file xml che contiene ciascuna riga e assicurarsi che l'altezza dell'elemento principale sia wrap_content NON match_parent.

+1

sì, questo ha funzionato, ha dovuto rimuovere il genitore relativo layout di corrispondenza genitore per avvolgere il contenuto –

+1

Grazie mi hai salvato la vita .... –

+0

funziona come fascino..thanku –

21
  1. trovare l'attributo card_view:cardUseCompatPadding="true" in cards_layout.xml ed eliminarlo. Avvia l'app e scoprirai che non c'è alcun margine tra ogni oggetto cardview.

  2. Aggiungi attributi del margine che ti piacciono. Es:

    android:layout_marginTop="5dp" 
    android:layout_marginBottom="5dp" 
    
+1

Grazie, ha funzionato per me, anche se era questo solo un caso in cui card_view: cardUseCompatPadding = "true" non ha svolto il lavoro –

17

ho fatto una classe per gestire questo problema. Questa classe imposta margini diversi per gli articoli all'interno di recyclerView: solo la prima riga avrà un margine superiore e solo la prima colonna avrà margine sinistro.

public class RecyclerViewMargin extends RecyclerView.ItemDecoration { 
private final int columns; 
private int margin; 

/** 
* constructor 
* @param margin desirable margin size in px between the views in the recyclerView 
* @param columns number of columns of the RecyclerView 
*/ 
public RecyclerViewMargin(@IntRange(from=0)int margin ,@IntRange(from=0) int columns) { 
    this.margin = margin; 
    this.columns=columns; 

} 

/** 
* Set different margins for the items inside the recyclerView: no top margin for the first row 
* and no left margin for the first column. 
*/ 
@Override 
public void getItemOffsets(Rect outRect, View view, 
          RecyclerView parent, RecyclerView.State state) { 

    int position = parent.getChildLayoutPosition(view); 
    //set right margin to all 
    outRect.right = margin; 
    //set bottom margin to all 
    outRect.bottom = margin; 
    //we only add top margin to the first row 
    if (position <columns) { 
     outRect.top = margin; 
    } 
    //add left margin only to the first column 
    if(position%columns==0){ 
     outRect.left = margin; 
    } 
} 

}

è possibile impostare nel vostro recyclerview questo modo

RecyclerViewMargin decoration = new RecyclerViewMargin(itemMargin, numColumns); 
recyclerView.addItemDecoration(decoration); 
+0

Grazie a @Lenin .. –

0

cambiamento nella vista Recycler match_parent a wrap_content:

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

anche chang e alla voce di layout xml

Marchio altezza layout di genitore match_parent a wrap_content

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content"> 

    <TextView 
     android:id="@+id/textView" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
    /> 
0

Se si vuole fare in XML, jus impostare paddingTop e paddingLeft al RecyclerView e pari quantità di layoutMarginBottom e layoutMarginRight all'elemento che si gonfia nel proprio RecyclerView (o viceversa).

Problemi correlati