J'essaie d'utiliser le CardView
et il fonctionne bien en dessous de 5.0, mais a l'air étrange sur Lollipop.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:orientation="vertical"
Android:paddingBottom="@dimen/activity_vertical_margin"
Android:paddingLeft="@dimen/activity_horizontal_margin"
Android:paddingRight="@dimen/activity_horizontal_margin"
Android:paddingTop="@dimen/activity_vertical_margin">
<Android.support.v7.widget.CardView Android:layout_width="match_parent"
Android:layout_height="200dp">
<TextView
Android:id="@+id/textView"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:text="card1"
Android:textAppearance="?android:attr/textAppearanceLarge" />
</Android.support.v7.widget.CardView>
<Android.support.v7.widget.CardView Android:layout_width="match_parent"
Android:layout_height="200dp">
<TextView
Android:id="@+id/textView2"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:text="card2"
Android:textAppearance="?android:attr/textAppearanceLarge" />
</Android.support.v7.widget.CardView>
</LinearLayout>
Je rencontre la même question lorsque j'utilise le RecyclerView
, devrais-je ajouter quelque chose s'il fonctionne sur Lollipop?
Définissez ceci sur un CardView
:
app:cardUseCompatPadding="true"
De la documentation:
Ajoutez également un remplissage dans l’API v21 + afin d’avoir les mêmes mesures que les versions précédentes.
Utilisez ces deux balises ci-dessous à l'intérieur de votre cardview:
app:cardPreventCornerOverlap="false"
app:cardUseCompatPadding="true"
la première image est le comportement attendu de la vue de carte. lorsque la carte a une élévation, l’ombre tombe sur les couches inférieures. Dans les appareils pré-Lollipop, l’élévation est obtenue en ajoutant un rembourrage. les dispositifs pré-Lollipop auront donc un rembourrage autour de la vue de la carte.
Avant L, CardView ajoute un remplissage à son contenu et dessine des ombres dans cette zone. Ce montant de remplissage est égal à maxCardElevation + (1 - cos45) * cornerRadius sur les côtés et à maxCardElevation * 1,5 + (1 - cos45) * cornerRadius en haut et en bas.
Vous devez ajouter app:cardUseCompatPadding="true"
à votre Cardview
. Mais juste ajouter que peut vous donner une erreur. Pour éviter cette erreur, vous devez également ajouter xmlns:app="http://schemas.Android.com/apk/res-auto"
à votre CardView
.
Par exemple,
<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_height="wrap_content"
Android:layout_width="match_parent"
app:cardUseCompatPadding="true">
// Other views here
</Android.support.v7.widget.CardView>
Certains ajouteraient card_view:cardUseCompatPadding="true"
et xmlns:card_view="http://schemas.Android.com/apk/res-auto"
au lieu de ceux mentionnés ci-dessus. Les deux voies sont correctes.
Si vous voulez en savoir plus sur app en XML (Android), veuillez passer par ceci réponse :
Bien que les réponses précédentes résolvent le problème, ils n’ont pas expliqué le rôle de chaque attribut. Donc, pour être plus utile pour répondre aux demandeurs,
L'attribut cardPreventCornerOverlap
ajoute un remplissage à CardView sous v20 et avant pour empêcher les intersections entre le contenu de la carte et les coins arrondis.
cardUseCompatPadding
attribut ajoute un remplissage dans l'API v21 + ainsi que d'avoir les mêmes mesures avec les versions précédentes.