it-swarm.com.de

CardView zeigt nicht Schatten in Android L

Meine Kartenansicht in der Listenansicht zeigt in Android L (Nexus 5) keinen Schatten. Auch die runden Kanten werden nicht richtig angezeigt. Hier ist der Code für die Adapteransicht von Listview:

<?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"
xmlns:app="http://schemas.Android.com/apk/res/com.example.myapp"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
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"
    app:cardBackgroundColor="@Android:color/white"
    Android:foreground="?android:attr/selectableItemBackground"
    app:cardCornerRadius="4dp"
    app:cardElevation="4dp" >

    <RelativeLayout
        Android:layout_width="match_parent"
        Android:layout_height="match_parent"
        Android:paddingBottom="@dimen/activity_vertical_margin"
        Android:paddingTop="@dimen/activity_vertical_margin" >

        <TextView
            Android:id="@+id/tvName"
            Android:layout_width="wrap_content"
            Android:layout_height="wrap_content"
            Android:layout_alignParentTop="true"
            Android:layout_marginTop="@dimen/padding_small"
            Android:paddingLeft="@dimen/activity_horizontal_margin"
            Android:paddingRight="@dimen/activity_horizontal_margin"
            Android:textAppearance="?android:attr/textAppearanceLarge" />

        <ImageView
            Android:id="@+id/ivPicture"
            Android:layout_width="match_parent"
            Android:layout_height="wrap_content"
            Android:layout_below="@+id/tvName"
            Android:layout_centerHorizontal="true"
            Android:scaleType="fitCenter" />

        <TextView
            Android:id="@+id/tvDetail"
            Android:layout_width="wrap_content"
            Android:layout_height="wrap_content"
            Android:layout_below="@+id/ivPicture"
            Android:layout_centerHorizontal="true"
            Android:paddingLeft="@dimen/activity_horizontal_margin"
            Android:paddingRight="@dimen/activity_horizontal_margin" />
    </RelativeLayout>
</Android.support.v7.widget.CardView>

Und die ListView-XML:

<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:card_view="http://schemas.Android.com/apk/res-auto"
xmlns:tools="http://schemas.Android.com/tools"
xmlns:app="http://schemas.Android.com/apk/res/com.example.myapp"
Android:layout_width="fill_parent"
Android:layout_height="fill_parent"
Android:background="@drawable/app_bg" >

<ListView
    Android:id="@Android:id/list"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    Android:layout_alignParentTop="true"
    Android:cacheColorHint="#00000000"
    Android:divider="@Android:color/transparent"
    Android:drawSelectorOnTop="true"
    Android:smoothScrollbar="true" />

<ProgressBar
    Android:id="@+id/progressBarMain"
    style="?android:attr/progressBarStyleLarge"
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"
    Android:layout_centerInParent="true"
    Android:visibility="gone" /></RelativeLayout>

Es funktioniert gut auf Pre-L-Geräten mit korrektem Schatten und abgerundeten Ecken. Funktioniert aber nicht auf einem Android L-Gerät. Kannst du sagen, was mir hier fehlt?

98
isumit

Schließlich konnte ich Schatten auf dem Lollipop-Gerät erhalten, indem ich der Kartenansicht einen Rand hinzufügte. Hier ist das endgültige Kartenansicht-Layout:

<?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"
    xmlns:app="http://schemas.Android.com/apk/res/com.example.myapp"
    Android:layout_width="match_parent"
    Android:layout_height="wrap_content"
    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"
    app:cardBackgroundColor="@Android:color/white"
    Android:foreground="?android:attr/selectableItemBackground"
    Android:layout_marginLeft="@dimen/activity_horizontal_margin"
    Android:layout_marginRight="@dimen/activity_horizontal_margin"
    Android:layout_marginTop="@dimen/padding_small"
    Android:layout_marginBottom="@dimen/padding_small"
    app:cardCornerRadius="4dp"
    app:cardElevation="4dp" >

<RelativeLayout
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    Android:paddingBottom="@dimen/activity_vertical_margin"
    Android:paddingTop="@dimen/activity_vertical_margin" >

    <TextView
        Android:id="@+id/tvName"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:layout_alignParentTop="true"
        Android:layout_marginTop="@dimen/padding_small"
        Android:paddingLeft="@dimen/activity_horizontal_margin"
        Android:paddingRight="@dimen/activity_horizontal_margin"
        Android:textAppearance="?android:attr/textAppearanceLarge" />

    <ImageView
        Android:id="@+id/ivPicture"
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content"
        Android:layout_below="@+id/tvName"
        Android:layout_centerHorizontal="true"
        Android:scaleType="fitCenter" />

    <TextView
        Android:id="@+id/tvDetail"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:layout_below="@+id/ivPicture"
        Android:layout_centerHorizontal="true"
        Android:paddingLeft="@dimen/activity_horizontal_margin"
        Android:paddingRight="@dimen/activity_horizontal_margin" />
</RelativeLayout>

19
isumit

Nachdem ich die Dokumente noch einmal durchgegangen war, fand ich schließlich die Lösung.

Fügen Sie einfach card_view:cardUseCompatPadding="true" zu Ihrer CardView hinzu und Schatten werden auf Lollipop-Geräten angezeigt.

Was passiert, ist, dass der Inhaltsbereich in einer CardView auf anderen Geräten als Pre-Lollipop und Lollipop-Geräten unterschiedliche Größen aufweist. Bei Lollipop-Geräten wird der Schatten also tatsächlich von der Karte verdeckt, sodass er nicht sichtbar ist. Durch das Hinzufügen dieses Attributs bleibt der Inhaltsbereich auf allen Geräten gleich und der Schatten wird sichtbar.

Mein XML-Code lautet wie folgt:

<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="2dp"
    card_view:cardUseCompatPadding="true"
    >
...
</Android.support.v7.widget.CardView>
236
Ram Patra

Vergessen Sie nicht, dass Sie zum Zeichnen von Schatten eine hardwareAccelerated-Zeichnung verwenden müssen

hardwareAccelerated = true enter image description here

hardwareAccelerated = false hardwareAccelerated CardView

Weitere Informationen finden Sie unter Android-Hardwarebeschleunigung

42
AndreyICE

verwenden Sieapp:cardUseCompatPadding="true"in Ihrer Kartenansicht

<Android.support.v7.widget.CardView
        Android:id="@+id/card_view"
        Android:layout_width="match_parent"
        Android:layout_height="match_parent"
        Android:layout_marginRight="@dimen/cardviewMarginRight"
        app:cardBackgroundColor="@color/menudetailsbgcolor"
        app:cardCornerRadius="@dimen/cardCornerRadius"
        app:cardUseCompatPadding="true"
        app:elevation="0dp">
    </Android.support.v7.widget.CardView>
42
ShutterSoul

check hardwareAccelerated in manifest macht den Wert true. Falsch entfernt Schatten, wenn falscher Schatten in der XML-Vorschau angezeigt wird, im Telefon jedoch nicht.

25
JSONParser

Diese Zeile zu CardView hinzufügen ....

card_view:cardUseCompatPadding="true" //for enable shadow
card_view:cardElevation="9dp" // this for how much shadow you want to show

Tipps

Sie können layout_marginTop und layout_marginBottom vermeiden, da der Schatten selbst etwas Platz zum Auf und Ab benötigt. Der Betrag, der durch die Menge definiert wird, die Sie in card_view verwenden: cardElevation = "ndp".

Glückliche Kodierung (:

10

Sie können diese Codezeile für Schatten in der Kartenansicht hinzufügen

card_view:cardElevation="3dp"

Unten haben Sie ein Beispiel

<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"
    app:cardBackgroundColor="@Android:color/white"
    Android:foreground="?android:attr/selectableItemBackground"
    card_view:cardElevation="3dp"
    card_view:cardCornerRadius="4dp">

Hoffe das hilft!

9
Ye Min Htut

Fügen Sie einfach diese Tags hinzu:

app:cardElevation="2dp"
app:cardUseCompatPadding="true"

So ist es geworden:

<Android.support.v7.widget.CardView
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"
    app:cardBackgroundColor="?colorPrimary"
    app:cardCornerRadius="3dp"
    app:cardElevation="2dp"
    app:cardUseCompatPadding="true"
    app:contentPadding="1dp" />
8

Sie können es versuchen, indem Sie diese Zeile hinzufügen

 card_view:cardUseCompatPadding="true"

Der ganze Code wird so aussehen

  <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="200dp"
        Android:layout_margin="5dp"
        Android:orientation="horizontal"
        card_view:cardUseCompatPadding="true"
        card_view:cardCornerRadius="5dp">
 </Android.support.v7.widget.CardView
8
yubaraj poudel

In meinem Fall wurde der Schatten auf Android L-Geräten nicht angezeigt, da ich keinen Rand hinzugefügt habe. Das Problem ist, dass der CardView diesen Rand automatisch auf <5 Geräten erstellt. Jetzt mache ich es so:

CardView card = new CardView(context);
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
        LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
if (Build.VERSION_CODES.Lollipop == Build.VERSION.SDK_INT) {
    params.setMargins(shadowSize, shadowSize, shadowSize,
            shadowSize);
} else {
    card.setMaxCardElevation(shadowSize);
}
card.setCardElevation(shadowSize);
card.setLayoutParams(params);
7
Simon Heinen

Stellen Sie zunächst sicher, dass die folgenden Abhängigkeiten ordnungsgemäß hinzugefügt und in der Datei build.gradle kompiliert werden

    dependencies {
    ...
    compile 'com.Android.support:cardview-v7:21.0.+'

    }

und danach probiere folgenden Code:

     <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="200dp"
            Android:layout_margin="5dp"
            Android:orientation="horizontal"
            card_view:cardCornerRadius="5dp">
     </Android.support.v7.widget.CardView

problem in Android L steigt, da das Attribut layout_margin nicht hinzugefügt wird

4
prat3ik-patel

Fügen Sie Android hinzu: hardwareAccelerated = "true" in Ihrer Manifestdatei, wie unten beschrieben. Es funktioniert für mich

 <activity
        Android:name=".activity.MyCardViewActivity"
        Android:hardwareAccelerated="true"></activity>
3
yatin deokar

bewegen Sie Ihr Attribut "uses-sdk" oben in das Manifest, wie in der folgenden Antwort https://stackoverflow.com/a/27658827/1394139

0
Dinesh T A

Mein Recyclerview war langsam beim Laden, also habe ich durch das Lesen des stackoverflow.com "hardwareAccelerated" in "false" geändert, dann wird die Höhe nicht im Gerät angezeigt. Das habe ich wieder in wahr geändert. Für mich geht das. 

0
Lathesh

Ich denke, wenn Sie Ihr Manifest zuerst überprüfen, wenn Sie Android:hardwareAccelerated="false" geschrieben haben, sollten Sie es zu true machen, um Schatten für die Karte zu haben. Diese Antwort gefällt mir hier

0
amr ismail

Die Kartenansicht kann keinen Schatten anzeigen, da sich Ihre RelativeLayout im Schatten der Kartenansicht befindet. Um den Schatten anzuzeigen, fügen Sie Ihrer Kartenansicht Ränder hinzu. Zum Beispiel:

<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="match_parent"
Android:layout_height="wrap_content">

<Android.support.v7.widget.CardView
    Android:layout_width="match_parent"
    Android:layout_height="wrap_content"
    Android:layout_marginLeft="8dp"
    Android:layout_marginRight="8dp"
    Android:layout_marginTop="4dp"
    Android:layout_marginBottom="8dp">

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

</RelativeLayout>
0
Sudip Sadhukhan