web-dev-qa-db-fra.com

Ombre de mise en page simple dans Android

J'ai donc cherché sur le Web un moyen d'afficher une ombre simple pour une mise en page, mais il n'y a pas de moyen approprié de le faire.
.

Existe-t-il un autre moyen d'avoir une ombre de mise en page simple sans ajouter une toute nouvelle mise en page?

14
Mehdiway

J'ai pu trouver une solution à ce problème, et cela en ajoutant un View en dessous de notre fameuse mise en page, affichant un dégradé d'une couleur à l'autre.
Habituellement, la couleur First serait une sorte de grisâtre foncé, et la Second serait la couleur --- background (dans mon cas, je vais avoir un fond gris clair donc ce n'est pas complètement blanc).

Layout + View

Le xml se présenterait comme ceci:

...
<LinearLayout
    Android:id="@+id/headerLayout"
    Android:layout_width="fill_parent"
    Android:layout_height="fill_parent"
    Android:orientation="vertical" >

    <LinearLayout
        Android:layout_width="fill_parent"
        Android:layout_height="wrap_content"
        Android:layout_gravity="center"
        Android:background="@drawable/headerImage"
        Android:orientation="vertical" />

    <View
        Android:layout_width="fill_parent"
        Android:layout_height="5dip"
        Android:background="@drawable/drop_shadow" >
    </View>
</LinearLayout>
...

drop_shadow.xml:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:Android="http://schemas.Android.com/apk/res/Android">    
    <gradient
        Android:startColor="#404040"
        Android:endColor="#F1F1F1"
        Android:angle="270"
        >
    </gradient>
</shape>

J'espère que ça va aider;)

46
Mehdiway

Vous pouvez utiliser le Android.support.v4.view.ViewCompat classe qui définit l'élévation d'une vue à l'aide de la méthode statique setElevation. La classe est une aide pour accéder aux fonctionnalités en vue introduites après le niveau 4 de l'API de manière rétrocompatible.

L'élévation de base est en pixels, par exemple

View mFab = (View) findViewById(R.id.floating_button);
ViewCompat.setElevation(mFab, 12);
7
Ovokerie Ogbeta

Pour Lollipop et au-dessus, vous pouvez utiliser élévation .

Pour les anciennes versions:

Voici un hack paresseux 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é supprimée des 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érentes couleurs bg:

<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>
5
Oded Breiner