230 votes

Définir la couleur des formes Android de manière programmatique

J'essaie de simplifier la question, en espérant que cela aidera à trouver une réponse précise.

Disons que j'ai les éléments suivants oval forme :

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval">
    <solid android:angle="270"
           android:color="#FFFF0000"/>
    <stroke android:width="3dp"
            android:color="#FFAA0055"/>
</shape>

Comment puis-je définir la couleur de manière programmatique, à partir d'une classe d'activité ?

2voto

SANAT Points 3563

La manière simple de remplir la forme avec le Rayon est :

(view.getBackground()).setColorFilter(Color.parseColor("#FFDE03"), PorterDuff.Mode.SRC_IN);

1voto

Zealous Points 1622

Peut-être que j'arrive trop tard, mais si vous utilisez Kotlin. Il y a un moyen comme celui-ci

var gd = layoutMain.background as GradientDrawable

 //gd.setCornerRadius(10)
  gd.setColor(ContextCompat.getColor(ctx , R.color.lightblue))
  gd.setStroke(1, ContextCompat.getColor(ctx , R.color.colorPrimary)) // (Strokewidth,colorId)

Enjoy....

1voto

afhamu Points 659

Cela pourrait aider

Définir la couleur de la forme initialement sur transparent

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval">
   <solid android:angle="270"
       android:color="@android:color/transparent"/>
   <stroke android:width="3dp"
        android:color="#FFAA0055"/>
</shape>
  1. Définir la forme comme arrière-plan de la vue

  2. Définissez votre couleur préférée comme suit :

    Drawable bg = view.getBackground();
    bg.setColorFilter(Color.parseColor("#Color"), PorterDuff.Mode.ADD);

1voto

Chris Barth Points 41

J'avais besoin de faire cela dans mon adaptateur mais les solutions ci-dessus ne fonctionnaient pas ou nécessitaient >= Android version 10. Le code ci-dessous a fonctionné pour moi !

val drawable = DrawableCompat.wrap(holder.courseName.background)
DrawableCompat.setTint(drawable, Color.parseColor("#4a1f60"))

0voto

Ryan Points 31

Pour ceux qui utilisent C# Xamarin, voici une méthode basée sur l'extrait de Vikram :

private void SetDrawableColor(Drawable drawable, Android.Graphics.Color color)
{
    switch (drawable)
    {
        case ShapeDrawable sd:
            sd.Paint.Color = color;
            break;
        case GradientDrawable gd:
            gd.SetColor(color);
            break;
        case ColorDrawable cd:
            cd.Color = color;
            break;
    }
}

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