CardView à l'intérieur de RecyclerView a de marges supplémentaires
Je suis à l'aide d'un CardView comme élément à l'intérieur d'un RecyclerView. Alors pour android génère automatiquement les marges entre les cardView et l'écran et entre les différents cardViews.
<android.support.v7.widget.CardView
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/galleryCardBGColor"
app:cardCornerRadius="2dp" >
<android.support.v7.widget.RecyclerView
android:id="@+id/my_recycler_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scrollbars="vertical" />
J'ai suivi les instructions dans le lien pour les intégrer dans mon projet:
aide-recyclerview-et-cardview-en-eclipse adt
J'avais déjà été à l'aide d'un linearlayout pour l'élément de la liste :
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >
Cela fonctionnait parfaitement bien, sans marges, que ce soit entre les éléments de la liste. Maintenant j'ai juste placé le linéaire de la mise en page à l'intérieur de la cardView qui a abouti à des marges supplémentaires.
La raison étant que je veux fournir exacte marges de ces éléments, et les marges je approvisionnement est ajouté à cette préexistante marges.
J'ai essayé la fourniture de zéro ou négatif, les rembourrages/marges de la cardView élément, mais aucun de ces travaux.
Aucune idée, je peux supprimer ces marges ou sinon savez exactement combien marge est ajoutée.
Vous devez vous connecter pour publier un commentaire.
avez-vous vérifier si il est marge ou de rembourrage? (Dev Options /afficher la mise en page de limites)
CardView
ajoute de rembourrage dans les plates-formes pré-L de dessiner les ombres. En L, à moins que vous définissezuseCompatPadding=true
, il ne devrait y avoir aucun écart.Ajoutant des marges négatives (même si c'est moche) devrait fonctionner. Si elle ne l'est pas, veuillez ajouter un peu plus de code sur la façon dont vous êtes l'ajout d'eux et de la façon dont vous configurez le
RecyclerView
.Il a travaillé pour moi. Utilisation:
cardCornerRadius="1dp"
ou quelques autres montant arbitraire a fonctionné pour moi! Merci, @Shubham je pense que le réglage de la cardMaxElevation a fait le tourJuste décrit dans @yigit 's réponse, le CardView va ajouter une valeur par défaut de rembourrage pour dessiner l'ombre avant d'Android L. Le rembourrage taille est décrit dans CardView du doc.
J'ai trouvé la façon d'effacer ce remplissage (également ajouter rembourrage pour le contenu) est d'utiliser CardView de contentPaddingLeft(/Droite/Haut/Bas) attributs.
Si vous voulez effacer le défaut de rembourrage, vous pouvez définir la contentPadding à moins de valeur. Si vous souhaitez ajouter du contenu rembourrage, définir la contentPadding à la valeur que vous souhaitez.
Dans mon cas, j'utilise ces code pour effacer le défaut padding:
J'ai essayé @Shubham 's réponse, mais une IllegalStateException est jeté dans RadialGradient.java avec le message "le rayon doit être > 0".
Utiliser deux balises ci-dessous:
ajouter
card_view:cardPreventCornerOverlap="false"
à votrecard
Il ne fonctionne que si votre Image aux Coins Arrondis
Bien, semble il y a un moyen beaucoup plus facile de le faire, sans deviner le rembourrage et tous:
ou à l'aide de java:
Le commentaire de @vj9 en vertu de la accepté question m'a aidé à calculer les décalages. De le partager ici, car il peut aider quelqu'un d'autre:
float elevation = cardView.getCardElevation();
float radius = cardView.getRadius();
utilisation
sur la vue que vous souhaitez enveloppé dans la cardview
Je sais que je suis en retard mais j'espère que ça aidera quelqu'un
paramètre app:cardPreventCornerOverlap de faux fera l'affaire 🙂
Si vous n'avez pas besoin de le rayon de l'angle ou de l'altitude de bas niveau, envisagez d'utiliser
FrameLayout
sur la pré-Sucette.<include layout="@layout/card_view_compat" />
mise en page/card_view_compat
mise en page-v21/card_view_compat
myCardView.setShadowPadding(0,0,0,0);