web-dev-qa-db-fra.com

Android changer la couleur de l'ombre d'élévation du matériau

est-il possible de changer la couleur de l'ombre produite par la propriété d'élévation xml? Je veux que l'ombre soit modifiée dynamiquement par le code.

28
Broadwell

Je sais que cette question est très ancienne et probablement l'auteur n'a plus besoin de réponse. Je vais le laisser ici pour que les autres puissent le trouver.

Le système d'élévation de Lollipop ne prend pas en charge les ombres colorées.

Mais, si vous avez besoin d'ombres colorées, il est possible de les obtenir en utilisant du carbone. C'est une sorte de bibliothèque de support pour Material Design et dans la version la plus récente il y a une option pour changer la couleur de l'ombre. Il y a une tonne de jolis dessins sur Behance avec des ombres colorées et je pensais que ce serait bien de les avoir malgré l'absence d'une telle fonctionnalité dans Android. Il est important de noter que les ombres colorées sont émulées sur toutes Android, sur 5.0+ également).

https://github.com/ZieIony/Carbon

L'image et le code suivants peuvent être trouvés dans les échantillons de Carbon.

enter image description here

Code:

<carbon.widget.LinearLayout
    Android:layout_width="match_parent"
    Android:layout_height="wrap_content"
    Android:orientation="horizontal">

    <carbon.widget.Button
        Android:layout_width="56dp"
        Android:layout_height="56dp"
        Android:layout_margin="@dimen/carbon_padding"
        Android:background="#ffffff"
        app:carbon_cornerRadius="2dp"
        app:carbon_elevation="8dp"
        app:carbon_elevationShadowColor="@color/carbon_red_700"/>

</carbon.widget.LinearLayout>

"CardView":

<carbon.widget.LinearLayout
    Android:layout_width="match_parent"
    Android:layout_height="wrap_content"
    Android:orientation="horizontal">

    <carbon.widget.LinearLayout
        Android:layout_width="match_parent"
        Android:layout_height="160dp"
        Android:layout_margin="@dimen/carbon_margin"
        Android:background="#ffffff"
        app:carbon_cornerRadius="2dp"
        app:carbon_elevation="8dp"
        app:carbon_elevationShadowColor="@color/carbon_red_700">

        <carbon.widget.ImageView
            Android:layout_width="match_parent"
            Android:layout_height="0dp"
            Android:layout_weight="1"
            Android:src="@drawable/test_image"/>

        <carbon.widget.TextView
            Android:layout_width="match_parent"
            Android:layout_height="wrap_content"
            Android:text="test text"/>
    </carbon.widget.LinearLayout>

</carbon.widget.LinearLayout>
48
Zielony

Démarrage de l'API 28 (Pie) View # setOutlineAmbientShadowColor (int color) et View # setOutlineSpotShadowColor (int color) sont disponibles dans la classe View.

Si vous utilisez l'élévation sur votre vue, vous pouvez utiliser les deux méthodes pour modifier la couleur de l'ombre.

6
Gauthier

Vous pouvez utiliser Disposition des ombres . Vérifiez mon réponse .

0
user7856586