Lancer l'ombre sur le dessus de LinearLayout en utilisant android: élévation

j'ai ceci LinearLayout cela va être placé au bas d'une mise en page d'activité. Ce que je veux c' LinearLayout pour avoir un 4dp élévation, tout comme le haut de la barre d'outils devrait avoir, cependant, depuis android:elevation place l'ombre au-dessous de la composante ui et cette composante spécifique (linearLayout) va être au bas de l'écran, Je ne verrai aucune élévation du tout..

C'est mon LinearLayout code, et une image d'elle avec l'élévation par défaut mise en œuvre:

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

y a-t-il un moyen, en utilisant elevation pour placer une ombre au-dessus de la composante d'interface utilisateur? Merci à l'avance!

23
demandé sur natario 2015-09-04 13:36:59

3 réponses

Vous ne pouvez pas théoriquement le faire avec android:elevation, dans le sens que vous ne pouvez pas choisir le sens où l'ombre va être coulé.

Il y a deux solutions.

1. Un drawable

Vous pourriez, par exemple, mettre un ImageView juste au-dessus de votre mise en page et définissez android:src="@drawable/shadow". Ce devrait être une verticale GradientDrawable défini en XML, comme expliqué ici.

2. Solution de contournement

Alors que la plupart des l'ombre est en fait au-dessous de la vue, une ombre subtile est aussi au-dessus. Une solution de contournement pourrait utiliser une valeur très élevée pour elevation, comme 40dp: la partie inférieure va être cachée à cause de votre disposition, tandis que la partie supérieure va être étendue et ressembler à une ombre commune.

dans les deux cas, vous n'avez pas le contrôle de la valeur d'élévation dans dp, dans le sens que vous ne pouvez pas être sûr que votre ombre est équivalente à celle coulée par android:elevation=4dp.

29
répondu natario 2015-09-04 11:42:00

utiliser comme;

<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
répondu semih 2016-08-11 11:06:11

Essayez cela, je suis incapable de mettre en arrière-plan via xml puis j'ai essayé la programmation façon de résoudre cela et je travaille parfaitement reportez-vous cela si face à problème sur afficher l'ombre Linéaire Mise en page

lprofile.setBackgroundResource(R.drawable.background_with_shadow);

lprofile est ma ref de Linéaire de mise en page et background_with_shadow est xml pour l'application de l'ombre, je l'espère, je vais pour ur requirmement...merci u..

0
répondu user7957410 2017-07-01 08:57:08