web-dev-qa-db-fra.com

Lancer l'ombre au-dessus de LinearLayout sous Android: élévation

J'ai cette LinearLayout qui sera placée au bas d'une structure d'activité. Je veux que cette LinearLayout ait une élévation de 4dp, tout comme la barre d’outils supérieure devrait l’avoir, cependant, puisque Android:elevation place l’ombre en dessous du composant ui et que ce composant spécifique (linearLayout) va se trouver en bas de l’écran, j’ai gagné t voir aucune élévation du tout ..

Ceci est mon code LinearLayout et une image de celui-ci avec l'élévation par défaut implémentée:

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

Existe-t-il un moyen, en utilisant elevation, de placer une ombre au-dessus du composant ui?Merci d'avance!

24
yat0

Vous ne pouvez théoriquement pas le faire avec Android:elevation, en ce sens que vous ne pouvez pas choisir la direction dans laquelle l'ombre sera projetée.

Il y a deux solutions.

1. Dessins

Vous pouvez, par exemple, placer une ImageView juste au-dessus de votre présentation et définir Android:src="@drawable/shadow". Cela devrait être une GradientDrawable verticale définie en XML, comme expliqué ici .

2. Solution de contournement

Bien que la plus grande partie de l'ombre se trouve en dessous de la vue, une ombre subtile se trouve également au-dessus. Une solution de contournement peut utiliser une valeur très élevée pour elevation, telle que 40dp: la partie inférieure va être masquée à cause de votre mise en page, tandis que la partie supérieure sera développée et ressemblera à une ombre commune.

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

31
natario

utiliser comme 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
semih

Ajoutez ce code ci-dessus dans la vue dans laquelle vous souhaitez une élévation supérieure ou ajoutez Android:layout_marginTop="-4dp" et ajoutez ci-dessous la vue ci-dessus 

<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

Essayez ceci, je ne parviens pas à définir un arrière-plan via xml, puis j’ai essayé la méthode programmatique pour résoudre ce problème et je travaille parfaitement en ce sens si vous rencontrez un problème dans l’ombre de la projection linéaire 

lprofile.setBackgroundResource(R.drawable.background_with_shadow);

lprofile est mon arbitre de mise en page linéaire et background_with_shadow est xml pour appliquer une ombre, j'espère que je le ferai pour votre urgence ... merci.

0
user7957410