Marge entre les articles de recycler view Android

Salut je suis ce tutoriel

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

maintenant je suis face à un problème bizarre la marge entre chaque élément cardview à l'intérieur de la vue recycler est beaucoup trop.

PROBLÈME

comment réduire la marge entre chaque élément de cardview placé dans recycler view.

enter image description here

32
demandé sur tushar narang 2016-05-29 11:49:11

9 réponses

j'ai fait face à une question similaire, avec Relativeévolution comme élément racine pour chaque ligne dans le recyclerview.

pour résoudre le problème, trouvez le fichier xml qui contient chaque ligne et assurez-vous que la hauteur de l'élément racine est wrap_content et non match_parent .

67
répondu Maher Nabil 2016-05-29 09:07:30

j'ai fait un cours pour gérer cette question. Cette classe définit des marges différentes pour les articles à l'intérieur de la recyclerView: seule la première rangée aura une marge supérieure et seule la première colonne aura une marge de gauche.

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

}

vous pouvez le configurer dans votre recyclerview de cette façon

 RecyclerViewMargin decoration = new RecyclerViewMargin(itemMargin, numColumns);
 recyclerView.addItemDecoration(decoration);
26
répondu Victor 2016-08-16 20:57:41
  1. trouver l'attribut card_view:cardUseCompatPadding="true" dans cards_layout.xml et le supprimer. Démarrez app et vous constaterez qu'il n'y a pas de marge entre chaque élément de cardview.

  2. ajouter les attributs de marge que vous aimez. Ex:

    android:layout_marginTop="5dp"
    android:layout_marginBottom="5dp" 
    
23
répondu Jing 2016-05-29 10:39:30

au lieu d'utiliser XML pour ajouter de la marge entre les articles dans RecyclerView, C'est une meilleure façon d'utiliser RecyclerView.Élément decoration qui fournit par cadre android.

donc, je crée une bibliothèque pour résoudre ce problème.

https://github.com/TheKhaeng/recycler-view-margin-decoration

entrez la description de l'image ici

2
répondu The Khaeng 2017-05-01 10:03:29

utiliser CardView dans Recyclerview article Layout comme ceci:

 <android.support.v7.widget.CardView
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:card_view="http://schemas.android.com/tools"
        card_view:cardCornerRadius="10dp"
        app:cardBackgroundColor="#ACACAC"
        card_view:cardElevation="5dp"
        app:contentPadding="10dp"
        card_view:cardUseCompatPadding="true">
1
répondu KKumar Technologies 2018-05-29 07:12:09

changement de Recycleur de vue match_parent à wrap_content :

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

aussi changement de la disposition de l'article xml

Make parent hauteur de présentation de match_parent à 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
répondu mohit 2016-12-21 13:54:45

si vous voulez le faire dans XML , jus set paddingTop et paddingLeft à votre RecyclerView et un montant égal de layoutMarginBottom et layoutMarginRight à l'article que vous gonflez dans votre RecyclerView (ou vice versa).

0
répondu Vlad 2017-02-05 10:22:41

utiliser CompatPadding dans CardView article

0
répondu KKumar Technologies 2018-10-02 12:05:24