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>
Existe-t-il un moyen, en utilisant elevation
, de placer une ombre au-dessus du composant ui?Merci d'avance!
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
.
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>
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" />
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.