Meine Kartenansicht in Listview zeigt in Android L (Nexus 5) keinen Schatten. Auch die runden Kanten sind nicht richtig dargestellt. 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 richtigem Schatten und abgerundeten Ecken. Funktioniert aber nicht auf einem Android L-Gerät. Kannst du sagen, was mir hier fehlt?
Antworten:
Nachdem ich die Dokumente noch einmal durchgesehen hatte, fand ich endlich die Lösung.
Fügen
card_view:cardUseCompatPadding="true"
Sie einfach Ihre hinzuCardView
und Schatten erscheinen auf Lollipop-Geräten.Was passiert ist, dass der Inhaltsbereich in einer
CardView
Größe auf Pre-Lollipop- und Lollipop-Geräten unterschiedlich groß ist. Bei Lutschergeräten wird der Schatten tatsächlich von der Karte verdeckt, sodass er nicht sichtbar ist. Durch Hinzufügen dieses Attributs bleibt der Inhaltsbereich auf allen Geräten gleich und der Schatten wird sichtbar.Mein XML-Code lautet wie folgt:
quelle
card_view:cardElevation="2sp"
zucard_view:cardElevation="2dp"
?sp
sollte nur für Textgrößen verwendet werden.dp
sollte für alle anderen Dimensionen verwendet werden.Vergessen Sie nicht, dass Sie zum Zeichnen von Schatten das
hardwareAccelerated
Zeichnen verwenden müssenhardwareAccelerated = true
hardwareAccelerated = false
Weitere Informationen finden Sie unter Android-Hardwarebeschleunigung
quelle
Verwenden Sie
app:cardUseCompatPadding="true"
in Ihrer Kartenansicht. Beispielsweisequelle
check hardwareAccelerated in manifest macht es wahr, macht es falsch entfernt Schatten, wenn in der XML-Vorschau falscher Schatten erscheint, aber nicht im Telefon.
quelle
Fügen Sie diese Zeile zu CardView hinzu ....
Tipps
Sie können layout_marginTop und layout_marginBottom vermeiden, da der Schatten selbst etwas Platz zum Auf und Ab benötigt. Der Platz, der durch die Verwendung in card_view definiert wird: cardElevation = "ndp".
Happy Coding (:
quelle
Endlich konnte ich Schatten auf dem Lollipop-Gerät bekommen, indem ich der Kartenansicht einen Rand hinzufügte. Hier ist das endgültige Layout der Kartenansicht:
quelle
8dp
genugFügen Sie einfach diese Tags hinzu:
So ist es geworden:
quelle
Sie können diese Codezeile für Schatten in der Kartenansicht hinzufügen
Unten haben Sie ein Beispiel
Hoffe das hilft!
quelle
Sie können es versuchen, indem Sie diese Zeile hinzufügen
Der gesamte Code wird so aussehen
quelle
In meinem Fall wurde der Schatten auf Android L-Geräten nicht angezeigt, da ich keinen Rand hinzugefügt habe. Das Problem ist, dass CardView diesen Rand auf <5 Geräten automatisch erstellt. Jetzt mache ich das so:
quelle
Fügen Sie android: hardwareAccelerated = "true" in Ihre Manifest-Datei ein, wie unten, es funktioniert für mich
quelle
Stellen Sie zunächst sicher, dass die folgenden Abhängigkeiten ordnungsgemäß in der Datei build.gradle hinzugefügt und kompiliert werden
und danach versuchen Sie den folgenden Code:
Problem tritt in Android L auf, da das Attribut layout_margin nicht hinzugefügt wurde
quelle
Mein Recyclerview wurde beim Laden langsam ausgeführt. Beim Lesen von stackoverflow.com habe ich hardwareAccelerated in "false" geändert, dann wird die Höhe im Gerät nicht angezeigt. Das habe ich wieder auf wahr geändert. Für mich geht das.
quelle
RelativeLayout
Die Kartenansicht kann keinen Schatten anzeigen, da Sie sich im Schatten der Kartenansicht befinden. Um den Schatten anzuzeigen, fügen Sie Ihrer Kartenansicht Ränder hinzu. Beispielsweise:quelle
Ich denke, wenn Sie zuerst Ihr Manifest überprüfen, wenn Sie geschrieben haben
android:hardwareAccelerated="false"
, sollten Sietrue
es schaffen, Schatten für die Karte zu haben. Wie diese Antwort hierquelle
Überprüfen Sie, ob Sie
android:layerType="software"
in Ihrem RecyclerView nicht verwenden .Ändern Sie es, um
android:layerType="hardware"
das Problem für mich zu lösen.quelle
Verschieben Sie Ihr Attribut "used-sdk" wie in der folgenden Antwort https://stackoverflow.com/a/27658827/1394139 über das Manifest
quelle