32

Sto usando il cardview nella mia app per Android. Tuttavia l'ombra non sta mostrando. Ecco il layout xmlL'ombreggiatura Cardview non viene visualizzata nei dispositivi lollipop?

Anche l'ombra di default delle opzioni non viene visualizzata.

<?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

+0

Penso che lo sfondo di linerlayout e il colore dell'ombra siano i similari. Prova a colorare il colore del layout della fodera, quindi controlla se è visibile o meno. –

+0

cambiato il colore ma senza fortuna @PankajKumar –

+0

Lontano ma ho visto che questo accada, prova a rimuovere xmlns: card_view = "http://schemas.android.com/apk/res-auto" sotto il CardView in modo che tu solo avere quello al LinearLayout. – zoltish

risposta

91

Dopo aver attraversato la documentazione ancora una volta, ho finalmente trovato la soluzione.

Basta aggiungere card_view:cardUseCompatPadding="true" al tuo CardView e le ombre appariranno sui dispositivi Lollipop.

Quello che succede è che l'area di contenuto in un CardView prende dimensioni diverse su dispositivi pre-lecca-lecca e lecca-lecca. Quindi nei dispositivi lecca-lecca l'ombra è effettivamente coperta dalla carta in modo che non sia visibile. Aggiungendo questo attributo l'area del contenuto rimane la stessa su tutti i dispositivi e l'ombra diventa visibile.

Il mio codice XML è simile:

<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> 
5

Per Lollipop e superiori si dovrebbe aggiungere alcuni margini per la carta:

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

Dal momento che l'ombra si trova al di fuori della vista reale

+0

hai salvato il mio uomo giorno.Alcuni come 'cardElevation' e' cardUseCompatPadding' non funzionavano senza margine per Lollipop. –

1

per qualcuno,

un'altra cosa di cui dovresti essere a conoscenza, le ombre non verranno visualizzate se hai questa linea nel manifest:

Android: hardwareAccelerated = "false"

ho provato tutte le cose suggerito ma ha funzionato solo per me quando ho rimosso la linea, la ragione ho avuto la linea era perché la mia applicazione funziona con una serie di immagini bitmap e stavano causando l'arresto anomalo dell'app.

+1

Grazie @adnan, mi è stato fatto un sacco di ricerche e non sono stato in grado di fare elevazione o ombra su cardview ma basta rimuovere l'androide: hardwareAccelerated = "false" da manifest.xml e ora sembra come richiesto. –

0

Si prega di provare a mettere android: hardwareAccelerated = "false" Il file androidManifest può risolvere il tuo problema perché ho anche affrontato lo stesso problema e risolto aggiungendo 1 riga solo in manifest.

Problemi correlati