79 votes

Comment afficher l'ombre autour de la linéarité dans Android?

Comment puis-je montrer l'ombre pour ma mise en page linéaire. Je veux un fond arrondi de couleur blanche avec une ombre autour de la représentation linéaire. Je l'ai fait jusqu'à présent. Aidez-moi, s'il vous plaît. Merci d'avance.

 <LinearLayout
 android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_margin="10dp"
android:background="@xml/rounded_rect_shape"
android:orientation="vertical"
android:padding="10dp">
<-- My buttons, textviews, Imageviews go here -->
</LinearLayout>
 

Et rounded_rect_shape.xml sous le répertoire xml

  <?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle" >

<solid android:color="#ffffff" />

<corners
android:bottomLeftRadius="3dp"
android:bottomRightRadius="3dp"
android:topLeftRadius="3dp"
android:topRightRadius="3dp" />
 

147voto

muthee Points 589

Il existe également une autre solution au problème en mettant en œuvre une liste de couches qui servira de fond pour LinearLayoout.

Ajoutez le fichier background_with_shadow.xml à res/drawable . Contenant:

 <?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item >
        <shape 
            android:shape="rectangle">
        <solid android:color="@android:color/darker_gray" />
        <corners android:radius="5dp"/>
        </shape>
    </item>
    <item android:right="1dp" android:left="1dp" android:bottom="2dp">
        <shape 
            android:shape="rectangle">
        <solid android:color="@android:color/white"/>
        <corners android:radius="5dp"/>
        </shape>
    </item>
</layer-list>
 

Ajoutez ensuite la liste de calques en tant qu'arrière-plan de votre LinearLayout.

 <LinearLayout
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:background="@drawable/background_with_shadow"/>
 

30voto

Murillo Henrique Points 317

Eh bien, c'est facile à réaliser.

Tout simplement construire un GradientDrawable qui vient de noir et va à une couleur transparente, que l'utilisation relation parent pour placer votre forme proche du point de Vue que vous voulez avoir une ombre, puis il vous suffit de donner toutes les valeurs de hauteur ou de largeur.

Voici un exemple, ce fichier doit être créé à l'intérieur de res/drawable, j'ai le nom comme shadow.xml:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle" >

    <gradient
        android:startColor="#9444"
        android:endColor="#0000"
        android:type="linear"
        android:angle="90" <!-- Change this value to have the correct shadow angle, must be multiple from 45 -->             />

</shape>

Placez le code suivant au-dessus d'un LinearLayout par exemple, définir l' android:layout_width et android:layout_height de fill_parent et 2.3dp, vous aurez un bel effet d'ombre sur votre LinearLayout.

<View
    android:id="@+id/shadow"
    android:layout_width="fill_parent"
    android:layout_height="2.3dp" <!-- More means more shadow -->
    android:layout_above="@+id/id_from_your_LinearLayout" <!-- Use this attribute if you are placing this code inside a RelativeLayout, if your are placing it inside a LinearLayout, ignore it -->
    android:background="@drawable/shadow"/>

Espérons que cela aide quelqu'un.

28voto

Archie.bpgc Points 8027

Il n'y a pas un tel attribut dans Android, pour montrer une ombre. Mais les moyens possibles de le faire sont:

  1. Ajoutez un LinearLayout uni avec une couleur grise, sur lequel ajoutez votre mise en page actuelle, avec une marge en bas et à droite égale à 1 ou 2 dp

  2. Avoir une image de 9 patchs avec une ombre et la définir comme arrière-plan de votre mise en page linéaire

18voto

Oded Breiner Points 1852

Ici, c'est un paresseux hack de: http://odedhb.blogspot.com/2013/05/android-layout-shadow-without-9-patch.html

(toast_frame ne fonctionne pas sur KitKat, l'ombre a été retiré de toasts)

utilisez simplement:

android:background="@android:drawable/toast_frame"

ou:

android:background="@android:drawable/dialog_frame"

comme arrière-plan

exemples:

<TextView
        android:layout_width="fill_parent"
        android:text="I am a simple textview with a shadow"
        android:layout_height="wrap_content"
        android:textSize="18sp"
        android:padding="16dp"
        android:textColor="#fff"
        android:background="@android:drawable/toast_frame"
        />

et avec différents bg color:

<LinearLayout
        android:layout_height="64dp"
        android:layout_width="fill_parent"
        android:gravity="center"
        android:background="@android:drawable/toast_frame"
        android:padding="4dp"
        >
    <Button
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:text="Button shadow"
            android:background="#33b5e5"
            android:textSize="24sp"
            android:textStyle="bold"
            android:textColor="#fff"
            android:layout_gravity="center|bottom"
            />

</LinearLayout>

0voto

raju Points 353

Une solution possible est l'utilisation de patch neuf de l'image comme ceci http://developer.android.com/guide/topics/graphics/2d-graphics.html#nine-patch

OU

J'ai fait cela de la manière suivante. C'est ma principale disposition round_corner.xml et drop_shadow.xml utilisé comme arrière-plan des ressources. round_corner_two est même comme round_corner.xml seulement l'attribut de couleur est différente. copie de la round_corner.xml,drop_shadow.xml et round_conere_two.xml dans le dossier drawable.

<RelativeLayout
    android:id="@+id/facebook_id"
    android:layout_width="250dp"
    android:layout_height="52dp"
    android:layout_centerHorizontal="true"
    android:layout_marginTop="28dp"
    android:background="@drawable/round_corner" >

    <LinearLayout
        android:id="@+id/shadow_id"
        android:layout_width="match_parent"
        android:layout_height="48dp"
        android:layout_margin="1dp"
        android:background="@drawable/drop_shadow" >

        <TextView
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_gravity="center"
            android:layout_marginBottom="2dp"
            android:background="@drawable/round_corner_two"
            android:gravity="center"
            android:text="@string/fb_butn_text"
            android:textColor="@color/white" >
        </TextView>
    </LinearLayout>
</RelativeLayout>

round_corner.xml:

<?xml version="1.0" encoding="utf-8"?>
<shape
xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">

<!-- view background color -->
<solid
    android:color="#ffffff" >
</solid>

<!-- view border color and width -->
<stroke
    android:width="0dp"
    android:color="#3b5998" >
</stroke>

<!-- If you want to add some padding -->
<padding
    android:left="1dp"
    android:top="1dp"
    android:right="1dp"
    android:bottom="1dp"    >
</padding>

<!-- Here is the corner radius -->
<corners
    android:radius="10dp"   >
</corners>

</shape>

drop_shadow.xml

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item >
    <shape 
        android:shape="rectangle">
    <solid android:color="@android:color/darker_gray" />
    <corners android:radius="12dp"/>
    </shape>
</item>
<item android:right="1dp" android:left="1dp" android:bottom="5dp">
    <shape 
        android:shape="rectangle">
    <solid android:color="@android:color/white"/>
    <corners android:radius="5dp"/>
    </shape>
</item>
</layer-list>

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X