Ich habe eine ListView und möchte, dass mit jedem Listenelement ein Schatten darunter angezeigt wird. Ich verwende die neue Höhenfunktion von Android Lollipop, um ein Z für die Ansicht festzulegen, für die ich einen Schatten werfen möchte, und mache dies bereits effektiv mit der ActionBar (technisch eine Symbolleiste in Lollipop). Ich verwende die Höhe von Lollipop, aber aus irgendeinem Grund wird unter den Listenelementen kein Schatten angezeigt. So wird das Layout jedes Listenelements eingerichtet:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="vertical"
style="@style/block"
android:gravity="center"
android:layout_gravity="center"
android:background="@color/lightgray"
>
<RelativeLayout
android:layout_width="300dp"
android:layout_height="300dp"
android:layout_marginLeft="40dp"
android:layout_marginRight="40dp"
android:layout_marginTop="20dp"
android:layout_marginBottom="20dp"
android:elevation="30dp"
>
<ImageView
android:id="@+id/documentImageView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scaleType="centerCrop" />
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/alphared"
android:layout_alignParentBottom="true" >
<appuccino.simplyscan.Extra.CustomTextView
android:id="@+id/documentName"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textColor="@color/white"
app:typeface="light"
android:paddingLeft="16dp"
android:paddingTop="8dp"
android:paddingBottom="4dp"
android:singleLine="true"
android:text="New Document"
android:textSize="27sp"/>
<appuccino.simplyscan.Extra.CustomTextView
android:id="@+id/documentPageCount"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textColor="@color/white"
app:typeface="italic"
android:paddingLeft="16dp"
android:layout_marginBottom="16dp"
android:text="1 page"
android:textSize="20sp"/>
</LinearLayout>
</RelativeLayout>
</RelativeLayout>
Hier ist jedoch, wie das Listenelement ohne Schatten angezeigt wird:
Ich habe auch Folgendes ohne Erfolg versucht:
- Stellen Sie die Höhe auf ImageView und TextViews selbst anstelle des übergeordneten Layouts ein.
- Hat einen Hintergrund auf die ImageView angewendet.
- Verwendete ÜbersetzungZ anstelle von Elevation.
android
material-design
shadow
android-elevation
AggieDev
quelle
quelle
Antworten:
Ich habe ein bisschen mit Schatten auf Lollipop herumgespielt und Folgendes gefunden:
ViewGroup
Grenzen eines Elternteils aus irgendeinem Grund den Schatten seiner Kinder abschneiden; undandroid:elevation
sind, werden durch dieView
Grenzen des 's abgeschnitten, nicht durch die Grenzen, die sich durch den Rand erstrecken;android:clipToPadding="false"
festzulegen.Hier ist mein Vorschlag an Sie, basierend auf dem, was ich weiß:
RelativeLayout
, dass die Auffüllung den Rändern entspricht, die Sie für das relative Layout festgelegt haben, für das Sie Schatten anzeigen möchten.android:clipToPadding="false"
auf derselbenRelativeLayout
;RelativeLayout
auch die Höhe eingestellt ist.Am Ende des Tages sollte Ihr relatives Layout auf oberster Ebene folgendermaßen aussehen:
Das relative Innenlayout sollte folgendermaßen aussehen:
quelle
Wenn Sie eine Ansicht ohne Hintergrund haben, hilft Ihnen diese Zeile
Standardmäßig wird der Schatten durch den Hintergrund der Ansicht bestimmt. Wenn also kein Hintergrund vorhanden ist, gibt es auch keinen Schatten.
quelle
<solid>
.none
. Vielen Dank!Anscheinend können Sie nicht einfach eine Ansicht in einer Ansicht festlegen und anzeigen lassen. Sie müssen auch einen Hintergrund angeben.
Die folgenden Zeilen, die meinem LinearLayout hinzugefügt wurden, zeigten schließlich einen Schatten:
quelle
Eine andere Sache, die Sie beachten sollten: Schatten werden nicht angezeigt, wenn Sie diese Zeile im Manifest haben:
android: hardwareAccelerated = "false"
Ich habe alle vorgeschlagenen Dinge ausprobiert, aber es hat nur bei mir funktioniert, als ich die Zeile entfernt habe. Der Grund, warum ich die Zeile hatte, war, dass meine App mit einer Reihe von Bitmap-Bildern funktioniert und die App abstürzt.
quelle
android:clipToPadding="false"
mit dieser Lösung brauchen .Wenn Sie eine Ansicht ohne Hintergrund haben, hilft Ihnen diese Zeile
Wenn Sie eine Ansicht mit Hintergrund haben, hilft Ihnen diese Zeile
quelle
android:outlineProvider="paddedBounds"
Diese Linie hat bei mir funktioniert. Ich habe Selector Drawable eingestellt.Wenn Sie einem Schaltflächenelement eine Höhe hinzufügen, müssen Sie die folgende Zeile hinzufügen:
Siehe Android 5.0 Android: Elevation Funktioniert für die Ansicht, aber nicht Button?
quelle
Ugh, ich habe gerade eine Stunde damit verbracht, das herauszufinden. In meinem Fall hatte ich einen Hintergrund eingestellt, der jedoch auf eine Farbe eingestellt war. Dies reicht nicht aus. Sie müssen den Hintergrund der Ansicht auf ein Zeichenelement setzen.
zB Dies wird keinen Schatten haben:
aber das wird
BEARBEITEN: Haben Sie auch festgestellt, dass, wenn Sie einen Selektor als Hintergrund verwenden und die Ecke nicht eingestellt ist, der Schatten nicht im Vorschaufenster angezeigt wird, sondern auf dem Gerät
zB Dies hat keinen Schatten in der Vorschau:
aber das tut:
quelle
Das Hinzufügen von Hintergrundfarbe hat mir geholfen.
quelle
Manchmal mag ich es
background="@color/***"
oderbackground="#ff33**"
nicht, ich ersetze esbackground_color
durch Drawable, dann funktioniert esquelle
Wenn die Höhe immer noch nicht angezeigt wird, versuchen Sie es
das wird dir definitiv helfen.
quelle
Wenn Sie einen transparenten Hintergrund haben möchten und
android:outlineProvider="bounds"
für Sie nicht funktionieren, können Sie einen benutzerdefinierten ViewOutlineProvider erstellen:Und stellen Sie diesen Anbieter auf Ihre transparente Ansicht ein:
Quellen: https://code.google.com/p/android/issues/detail?id=78248#c13
[EDIT] Die Dokumentation von Drawable.getAlpha () besagt, dass es spezifisch ist, wie das Drawable das Alpha bedroht. Es ist möglich, dass immer 255 zurückgegeben wird. In diesem Fall können Sie das Alpha manuell bereitstellen:
Wenn Ihr Ansichtshintergrund ein StateListDrawable mit der Standardfarbe # DDFF0000 ist, ist dies mit Alpha DDx0 / FFx0 == 0.86
quelle
Geben Sie dem für mich bearbeiteten Layout eine Hintergrundfarbe wie:
quelle
Ich hatte etwas Glück mit der Einstellung
clipChildren="false"
des übergeordneten Layouts.quelle
Ich habe einige Zeit daran gearbeitet und schließlich festgestellt, dass bei dunklem Hintergrund kein Schatten sichtbar ist
quelle
Neben der akzeptierten Antwort gibt es noch einen weiteren Grund, aufgrund dessen die Höhe möglicherweise nicht wie erwartet funktioniert, wenn die Bluelight-Filterfunktion des Telefons eingeschaltet ist.
Ich war mit diesem Problem konfrontiert, als die Höhe in meinem Gerät völlig verzerrt und unerträglich erschien. Aber die Höhe war in der Vorschau in Ordnung. Durch Ausschalten des Bluelight-Filters am Telefon wurde das Problem behoben.
Also auch nach dem Einstellen
Die Höhe funktioniert nicht richtig, dann können Sie versuchen, an den Farbeinstellungen des Telefons zu basteln.
quelle
Ich glaube, Ihr Problem beruht auf der Tatsache, dass Sie das Höhenelement auf ein relatives Layout angewendet haben, das das übergeordnete Element ausfüllt. Das übergeordnete Element schneidet alle untergeordneten Ansichten in seiner eigenen Zeichenfläche ab (und ist die Ansicht, die den Schatten des untergeordneten Elements verarbeitet). Sie können dies beheben, indem Sie eine Elevationseigenschaft auf die oberste
RelativeLayout
in Ihrer Ansichts-XML (das Root-Tag) anwenden .quelle
In meinem Fall waren Schriftarten das Problem.
1) Ohne dass
fontFamily
ich einenandroid:background
Wert einstellen musste .2) mit musste
fontFamily
ichandroid:outlineProvider="bounds"
einstellung hinzufügen :quelle
In meinem Fall wurde dies durch eine benutzerdefinierte übergeordnete Komponente verursacht, die den Typ der Rendering-Ebene auf "Software" festlegte:
Das Entfernen dieser Zeile hat den Trick getan. Oder natürlich müssen Sie bewerten, warum dies überhaupt vorhanden ist. In meinem Fall sollte Honeycomb unterstützt werden, was weit hinter dem aktuellen Mindest-SDK für mein Projekt liegt.
quelle
Überprüfen Sie auch, ob Sie in dieser Ansicht kein Alpha ändern. Ich untersuche ein Problem, wenn ich in einigen Ansichten das Alpha mit der Höhe ändere. Sie verlieren einfach die Höhe, wenn Alpha geändert und wieder auf 1f geändert wird.
quelle