wake-up-neo.net

Schatten auf LinearLayout mithilfe von Android werfen: Elevation

Ich habe diesen LinearLayout, der am Ende eines Aktivitätslayouts platziert wird. Ich möchte, dass dieser LinearLayout eine 4dp-Höhe hat, genau wie die obere Symbolleiste jedoch, da Android:elevation den Schatten unterhalb der UI-Komponente platziert und diese spezifische Komponente (linearLayout) am unteren Rand des Bildschirms angezeigt wird. t sieht überhaupt keine Höhe ..

Dies ist mein LinearLayout-Code und ein Bild davon mit der standardmäßig implementierten Erhöhung:

    <?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:layout_width="match_parent"
    Android:layout_height="wrap_content"
    Android:weightSum="3"
    Android:background="@Android:color/transparent"
    Android:orientation="horizontal"
    Android:elevation="4dp"
    Android:layout_alignParentBottom="true">

    <ImageButton
        Android:id="@+id/playButton"
        Android:layout_width="0dp"
        Android:layout_height="match_parent"
        Android:layout_weight="1"
        Android:scaleType="center"
        Android:clickable="true"
        Android:background="@drawable/bottom_toolbar_menu_selector"
        Android:src="@drawable/ic_play"
        style="?android:attr/borderlessButtonStyle" />

    <ImageButton
        Android:id="@+id/stopButton"
        Android:layout_width="0dp"
        Android:layout_height="match_parent"
        Android:layout_weight="1"
        Android:scaleType="center"
        Android:clickable="true"
        Android:background="@drawable/bottom_toolbar_menu_selector"
        Android:src="@drawable/ic_stop"
        style="?android:attr/borderlessButtonStyle" />

    <ImageButton
        Android:id="@+id/bookmarkButton"
        Android:layout_width="0dp"
        Android:layout_height="match_parent"
        Android:layout_weight="1"
        Android:scaleType="center"
        Android:clickable="true"
        Android:background="@drawable/bottom_toolbar_menu_selector"
        Android:src="@drawable/ic_bookmark"
        style="?android:attr/borderlessButtonStyle" />

</LinearLayout>

 enter image description here

Gibt es eine Möglichkeit, mithilfe von elevation einen Schatten auf die UI-Komponente zu setzen? Vielen Dank im Voraus!

24
yat0

Mit Android:elevation ist dies theoretisch nicht möglich, da die Richtung, in die der Schatten geworfen werden soll, nicht ausgewählt werden kann.

Es gibt zwei Lösungen.

1. Drawables

Sie können beispielsweise eine ImageView direkt über Ihr Layout setzen und Android:src="@drawable/shadow" setzen. Dies sollte eine vertikale GradientDrawable sein, die in XML definiert ist, wie hier .

2. Problemumgehung

Während der größte Teil des Schattens tatsächlich unterhalb der Ansicht liegt, ist auch ein subtiler Schatten oben. Eine Problemumgehung verwendet möglicherweise einen sehr hohen Wert für elevation wie 40dp: Der untere Teil wird aufgrund Ihres Layouts ausgeblendet, während der obere Teil erweitert wird und wie ein gewöhnlicher Schatten wirkt.

In beiden Fällen haben Sie keine Kontrolle über den Höhenwert in dp, da Sie nicht sicher sein können, dass Ihr Schatten dem von Android:elevation=4dp gewirkten Schatten entspricht.

31
natario

gebrauch wie als;

<LinearLayout
    Android:layout_width="match_parent"
    Android:layout_height="205dp"
    Android:background="@color/white"
    Android:orientation="horizontal">

    <RelativeLayout
        Android:layout_width="match_parent"
        Android:layout_height="200dp"
        Android:layout_marginTop="-5dp"
        Android:background="@color/white"
        Android:elevation="3dp"
        Android:paddingTop="5dp">

        // CHILD VIEWS
    </RelativeLayout>
</LinearLayout>
1
semih

Fügen Sie diesen Code oberhalb der Ansicht hinzu, in der Sie die oberste Ansicht wünschen, oder fügen Sie Android:layout_marginTop="-4dp" hinzu und fügen Sie unterhalb der obigen Ansicht hinzu 

<Android.support.v7.widget.CardView
    Android:layout_width="match_parent"
    Android:layout_height="0.01dp"
    Android:layout_below="@+id/scrollbar"
    app:cardBackgroundColor="@Android:color/transparent"
    app:cardCornerRadius="0dp"
    app:cardElevation="@dimen/dp_4" />
0

Versuchen Sie Folgendes: Ich kann den Hintergrund nicht durch XML einstellen. Dann habe ich versucht, den programmatischen Weg zu lösen 

lprofile.setBackgroundResource(R.drawable.background_with_shadow);

lprofile ist meine Referenz von Linear Layout und background_with_shadow ist XML zum Anwenden von Schatten. Ich hoffe, dass ich für ur Requirmement ... Danke ..

0
user7957410