32

Korzystam z widoku cardview w mojej aplikacji na Androida. Jednak cień się nie pokazuje. Oto układ xmlCień widoku karty nie pojawia się na urządzeniach Lollipop?

Domyślny cień menu opcji również się nie pokazuje.

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

Myślę, że tło linerlayout i kolor cienia są proste. Spróbuj uporządkować kolor układu liniowego, a następnie sprawdź, czy jest widoczny, czy nie. –

+0

zmienił kolor, ale bez powodzenia @PankajKumar –

+0

Oszalały, ale widziałem, jak to się stało, spróbuj usunąć xmlns: card_view = "http://schemas.android.com/apk/res-auto" pod CardView, abyś tylko Ty mieć to na LinearLayout. – zoltish

Odpowiedz

91

Po przejściu przez docs ponownie, w końcu znalazłem rozwiązanie.

Po prostu dodaj card_view:cardUseCompatPadding="true" do swojego CardView, a cienie pojawią się na urządzeniach Lollipop.

Co się dzieje, obszar zawartości w CardView ma różne rozmiary na urządzeniach pre-Lollipop i Lollipop. Tak więc w urządzeniach Lollipop cień jest faktycznie zakryty przez kartę, więc nie jest widoczny. Po dodaniu tego atrybutu obszar zawartości pozostaje taki sam na wszystkich urządzeniach, a cień staje się widoczny.

Moje kodu xml jest jak:

<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

Dla lizak i wyższej należy dodać kilka marże na kartę:

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

Ponieważ cień leży poza rzeczywisty widok

+0

uratowałeś mojego człowieka.Niektóre metody 'cardElevation' i' cardUseCompatPadding' nie działały bez marginesu dla Lollipopa. –

1

dla kogoś,

jeszcze jedną rzecz, o której powinieneś wiedzieć, cienie nie będą się wyświetlać, jeśli masz tę linię w manifeście:

android: hardwareAccelerated = „false”

próbowałem wszystkie sugerowane rzeczy, ale to działało tylko dla mnie, kiedy usunięto linię, powód miałem linia była ponieważ moja aplikacja współpracuje z wieloma bitmapy i powodowały awarię aplikacji.

+1

Dziękuję @adnan, przeszukałem wiele kart i nie byłem w stanie zrobić elewacji ani cienia na widoku cardview, ale po prostu usunięto plik android: hardwareAccelerated = "false" z pliku manifest.xml i teraz wygląda tak, jak wymagałem. –

0

Spróbuj umieścić android: hardwareAccelerated = "false" androidManifest plik może rozwiązać twój problem, ponieważ również stanąłem w obliczu tego samego problemu i rozwiązany przez dodanie 1 linii tylko w manifeście.