web-dev-qa-db-fra.com

L'ombre de Cardview n'apparaît pas dans les appareils Lollipop?

J'utilise le cardview dans mon Android. Cependant, l'ombre ne s'affiche pas. Voici la disposition xml

L'ombre du menu d'options par défaut ne s'affiche pas non plus.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    xmlns:tools="http://schemas.Android.com/tools"
    xmlns:card_view="http://schemas.Android.com/apk/res-auto"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    Android:background="#ECEDF0"
    Android:orientation="vertical" >

    <Android.support.v7.widget.CardView
        xmlns:card_view="http://schemas.Android.com/apk/res-auto"
        Android:id="@+id/card_view"
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content"
        Android:layout_gravity="center"
        Android:clipChildren="false"
        card_view:cardBackgroundColor="@color/white"
        card_view:cardCornerRadius="4dp"
        card_view:cardElevation="14dp"
        card_view:cardUseCompatPadding="true" >

        <TextView
            Android:layout_width="wrap_content"
            Android:layout_height="wrap_content"
            Android:padding="20dp"
            Android:text="Google Play" />
    </Android.support.v7.widget.CardView>

</LinearLayout>

Refer the attachment

32
Dinesh T A

Après avoir revu les documents, j'ai finalement trouvé la solution.

Ajoutez simplement card_view:cardUseCompatPadding="true" à votre CardView et des ombres apparaîtront sur les appareils Lollipop.

Ce qui se passe, c'est que la zone de contenu dans un CardView prend différentes tailles sur les appareils pré-Lollipop et Lollipop. Ainsi, dans les appareils Lollipop, l'ombre est en fait recouverte par la carte, donc elle n'est pas visible. En ajoutant cet attribut, la zone de contenu reste la même sur tous les appareils et l'ombre devient visible.

Mon code xml est comme:

<Android.support.v7.widget.CardView
    Android:id="@+id/media_card_view"
    Android:layout_width="match_parent"
    Android:layout_height="130dp"
    card_view:cardBackgroundColor="@Android:color/white"
    card_view:cardElevation="2sp"
    card_view:cardUseCompatPadding="true"
    >
...
</Android.support.v7.widget.CardView>
91
Ram Patra

Comme mentionné ici CardView ne montre pas Shadow dans Android L assurez-vous que vous dessinez votre vue en utilisant hardwareAccelerated = true

hardwareAccelerated = trueenter image description here

hardwareAccelerated = falsehardwareAccelerated CardView

Voir Accélération matérielle Android pour plus de détails

15
AndreyICE

Pour Lollipop et plus, vous devez ajouter des marges à la carte:

<Android.support.v7.widget.CardView
            Android:layout_width="match_parent"
            Android:layout_height="wrap_content"
            Android:layout_margin="4dp"
            />

Puisque l'ombre se trouve en dehors de la vue réelle

5
deviant

pour quelqu'un ,

une autre chose que vous devez savoir, les ombres ne s'afficheront pas si vous avez cette ligne dans le manifeste:

Android: hardwareAccelerated = "false"

J'ai essayé toutes les choses suggérées, mais cela n'a fonctionné pour moi que lorsque j'ai supprimé la ligne, la raison pour laquelle je l'avais était parce que mon application fonctionne avec un certain nombre d'images bitmap et qu'elles provoquaient le blocage de l'application.

1

Hé amis, j'ai obtenu la solution du problème ci-dessus. Ajoutez simplement ce code dans votre xml.

<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_margin="8dp"
    Android:id="@+id/griditem"
    Android:layout_height="match_parent"
    card_view:cardUseCompatPadding="true"
    card_view:cardElevation="4dp"
    card_view:cardCornerRadius="3dp">`

J'espère que cela vous sera utile ...

0
sachin pangare

Veuillez essayer de mettre Android: le fichier hardwareAccelerated = "false" androidManifest peut résoudre votre problème car j'ai également rencontré le même problème et résolu en ajoutant 1 ligne uniquement dans le manifeste.

0
Madhav_nimavat