web-dev-qa-db-fra.com

Définition de l'élévation en XML sur AppCompat CardView sur Android 5.0

D'après ce que j'ai compris, au début de la prévisualisation, il semblait impossible de définir l'élévation XML uniquement sur CardViews sans piratage Java. Maintenant que la version officielle est sortie, y a-t-il un moyen de le faire en XML sans écrire de code Java pour définir l'altitude?

J'ai essayé card_view:cardElevation sans effet. J'avais pensé que lorsque j'utilisais les émulateurs pour la version 5.0, tout allait bien. Mais maintenant que j'utilise la version officielle sur mon appareil actuel, tous mes CardViews ont disparu

Pre Lollipop, ça marche très bien. 

Voici mon xml complet

<?xml version="1.0" encoding="utf-8"?>
<Android.support.v7.widget.CardView xmlns:Android="http://schemas.Android.com/apk/res/Android"
    xmlns:card_view="http://schemas.Android.com/apk/res-auto"
    Android:orientation="horizontal"
    Android:layout_width="match_parent"
    Android:id="@+id/cv1"
    card_view:cardElevation="4dp"
    Android:layout_margin="6dp"
    card_view:cardCornerRadius="3dp"
    Android:layout_height="match_parent">
83
KickingLettuce

Cela ressemble à un problème de marge/remplissage, essayez de définir l'attribut cardUseCompatPadding à true. Par exemple.:

<Android.support.v7.widget.CardView 
    xmlns:Android="http://schemas.Android.com/apk/res/Android"
    xmlns:card_view="http://schemas.Android.com/apk/res-auto"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    Android:layout_margin="6dp"
    card_view:cardUseCompatPadding="true"
    card_view:cardElevation="4dp"
    card_view:cardCornerRadius="3dp">

Explication du doc ​​Android:

CardView ajoute un rembourrage supplémentaire pour dessiner des ombres sur les plates-formes avant L.

Cela peut entraîner des tailles de carte différentes entre L et avant L . Si vous devez aligner CardView avec d’autres vues, vous aurez peut-être besoin de api ressources de dimension spécifiques à la version pour prendre en compte les modifications. En tant que Une autre solution consiste à définir l'indicateur cardUseCompatPadding sur true et CardView ajoutera les mêmes valeurs de remplissage sur les plates-formes L et suivantes.

Étant donné que la définition de l'indicateur cardUseCompatPadding sur true ajoute des espaces inutiles dans l'interface utilisateur, la valeur par défaut est false.

292
Gaëtan M.

Vous devez utiliser l'attribut cardElevation

<Android.support.v7.widget.CardView
    xmlns:card_view="http://schemas.Android.com/apk/res-auto"
    card_view:cardElevation="4dp" />
12
Gabriele Mariotti

Si vous avez cette ligne 

Android:hardwareAccelerated="false"

dans la balise d'application manifeste, vos ombres n'étaient pas affichées. essayez de supprimer cette ligne

ou utiliser 

Android:hardwareAccelerated="true"

Cela a fonctionné pour moi! J'espère que cela fonctionne pour vous aussi :)

11
matin ashtiani

Il m'a résolu en ajoutant 

xmlns: card_view = "http://schemas.Android.com/apk/res-auto"

par exemple:

<Android.support.v7.widget.CardView
    xmlns:Android="http://schemas.Android.com/apk/res/Android"
    xmlns:card_view="http://schemas.Android.com/apk/res-auto"
    Android:layout_width="match_parent"
    Android:layout_height="wrap_content"
    Android:layout_marginTop="5dp"
    Android:layout_marginLeft="5dp"
    Android:layout_marginRight="5dp"
    card_view:cardCornerRadius="5dp">
0
felhi

j'ajoute une application: cardElevation = "8dp" attribut sur la vue de la carte, donc ce sera comme:

<Android.support.v7.widget.CardView
        Android:layout_width="match_parent"
        Android:layout_height="160dp"
        Android:layout_marginStart="16dp"
        Android:layout_marginLeft="16dp"
        Android:layout_marginTop="24dp"
        Android:layout_marginEnd="16dp"
        Android:layout_marginRight="16dp"
        app:cardElevation="8dp"
        app:cardCornerRadius="8dp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/textView">

        <ImageView
            Android:layout_width="wrap_content"
            Android:layout_height="wrap_content"
            Android:scaleType="centerCrop"
            Android:src="@drawable/kmp_warna1" />

    </Android.support.v7.widget.CardView>

J'espère que ça va aider

0
Cevin Ways