2014-11-18 17 views
77

Da quello che ho capito, all'inizio della fase di anteprima non sembrava esserci alcun modo per impostare l'elevazione in XML solo su CardView s senza un hack in Java. Ora che è uscita la versione ufficiale, c'è un modo per farlo in XML senza scrivere codice Java per impostare l'elevazione?Impostazione dell'elevazione in XML su AppCompat CardView su Android 5.0

Non ho provato card_view:cardElevation. Avevo pensato che quando stavo usando gli emulatori per 5.0 tutto andava bene. Ma ora che sto usando la versione ufficiale sul mio dispositivo attuale tutti i miei CardView s sono scomparsi

Pre Lollipop, funziona benissimo.

Ecco il mio pieno xml

<?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"> 
+0

Ho trovato il problema ma non ho ancora una risposta. Quando ho aggiornato a lollipop, in qualche modo i margini o il riempimento sono scomparsi in modo che non vedano gli angoli o i bordi della carta in modo che sia completamente piatta. – KickingLettuce

risposta

261

Sembra un problema margine/padding, cercare di impostare l'attributo cardUseCompatPadding su true. Ad esempio:

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

Spiegazione da doc Android:

CardView aggiunge imbottitura supplementare per disegnare le ombre su piattaforme prima L.

Ciò può causare Carte avere dimensioni diverse tra L e prima L Se è necessario allineare CardView con altre viste, potrebbe essere necessario disporre delle risorse di dimensione specifica della versione per tenere conto delle modifiche. Come alternativa a , puoi impostare flag cardUseCompatPadding su true e CardView aggiungerà gli stessi valori di padding sulle piattaforme L e successive.

Poiché l'impostazione flag cardUseCompatPadding su true aggiunge spazi vuoti non necessari nell'interfaccia utente, il valore predefinito è false.

9

Devi utilizzare l'attributo cardElevation

<android.support.v7.widget.CardView 
    xmlns:card_view="http://schemas.android.com/apk/res-auto" 
    card_view:cardElevation="4dp" /> 
+0

Credo di aver fatto un errore di battitura sopra e questo è quello che ho provato. Proverò di nuovo ... – KickingLettuce

+1

No, ho provato di nuovo, e non ha funzionato. Ho aggiunto il mio xml completo in alto. – KickingLettuce

+0

Funziona per me. Qual è l'altezza di default? –

10

Se si dispone di questa linea

android:hardwareAccelerated="false" 

nel tag file manifesto tue ombre non sono stati visualizzati. cercare di rimuovere questa linea

o utilizzare

android:hardwareAccelerated="true" 

Questo ha funzionato per me! Spero che funzioni anche per voi :)

+0

sì! quello era il problema !! grazie mille! ma non a causa dell'immagine bitmap che ho usato per lo sfondo, l'app viene rallentata :( – Kaushal28

0

Mi ha risolto aggiungendo

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

ad esempio:

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