web-dev-qa-db-fra.com

Est-il possible de changer la couleur de l'icône de conception de matériau à partir de XML dans Android?

En fait, j'essaie d'utiliser des icônes de couleur dans mon application. J'ai téléchargé le pack d'icônes de conception de matériel officiel depuis ici . Désormais, toutes les icônes de ce pack sont blanches, grises ou noires. Mais je veux que les icônes soient d'une couleur différente ... Quelque chose qui ressemble aux icônes à gauche dans cette image . Les icônes de téléphone et de courrier sont en bleu. Comment puis-je accomplir cela?

28
Akshay

Pour changer la couleur de l'icône, essayez

<ImageButton
    Android:layout_width="your value"
    Android:layout_height="your value"
    /* and so on ... */

    Android:tint="YourColor"
    />

Remarque: la couleur de teinte est peinte au sommet de l'image et non une couleur de remplacement. Ainsi, la teinte #80ff0000 sur une image noire vous donne 50% de rouge sur noir, pas 50% de rouge sur le fond C'est à dire. ce n'est pas équivalent aux images modèles iOS.

48
Yogesh Borkhade

Vous pouvez utiliser la variable TintImageView dans la bibliothèque de support appcompat, puis colorier/visionner l'image est simplement en appelant le Android:backgroundTint pour teinter l'image dans une couleur.


Xml

<TintImageView
Android:layout_width=""
Android:layout_height="" 
Android:src=""
Android:backgroundTint="@color/green"/>

ou 

<ImageView 
Android:tint="the_color_you_want"/>

Par programme

ImageView yourImageView = findViewById(...) yourImageView.setColorFilter(Context.getColor(your_color_here))


Le xml ci-dessus teint donc le vert en couleur, ce qui signifie qu'il colorera chaque pixel de la vue image visible en vert.

32
Rod_Algonquin

Je cherchais la même chose mais je le changeais dynamiquement dans le code. J'espère que cela aide quelqu'un qui cherche la même chose.

Créez un ImageView pour l'icône et utilisez setColorFilter sur cette vue.

ImageView imageViewIcon = (ImageView) listItem.findViewById(R.id.imageViewIcon);
imageViewIcon.setColorFilter(getContext().getResources().getColor(R.color.blue));
11
user3830188
<vector Android:height="48dp" Android:viewportHeight="24.0"
    Android:viewportWidth="24.0" Android:width="48dp" xmlns:Android="http://schemas.Android.com/apk/res/Android">
    <path Android:fillColor="#ca0f0f" Android:pathData="M3,5v14c0,1.1 0.89,2 2,2h14c1.1,0 2,-0.9 2,-2V5c0,-1.1 -0.9,-2 -2,-2H5c-1.11,0 -2,0.9 -2,2zm12,4c0,1.66 -1.34,3 -3,3s-3,-1.34 -3,-3 1.34,-3 3,-3 3,1.34 3,3zm-9,8c0,-2 4,-3.1 6,-3.1s6,1.1 6,3.1v1H6v-1z"/>
</vector>

vous changez de couleur en changeant Android: fillColor = "# ca0f0f"

4
Murali

Beaucoup d'alternatives ici déjà dans ce fil. Peut-être puis-je en ajouter un de plus pour celui qui le trouvera commode:

Vous pouvez également utiliser la classe Drawable, le code étant comme suit

    Resources res = getResources();
    Drawable drawable = res.getDrawable(R.drawable.ic_play_circle_filled);
    drawable = DrawableCompat.wrap(drawable);
    DrawableCompat.setTint(drawable, getResources().getColor(R.color.colorPrimary));

Bien que ce qui précède a fait l'affaire pour moi, mais pour mon cas d'utilisation, suggicient d'utiliser Android:tint

1
Neil B

Oui, c'est possible et c'est simple en utilisant cette bibliothèque: https://github.com/jrvansuita/IconHandler

Vous pouvez facilement appeler cela:

Icon.on(yourImageView).color(R.color.your_color).icon(R.mipmap.your_icon).put();
0
Vansuita Jr.

Comment changer la couleur d'une icône de matériau en XML

<ImageButton 
     Android:layout_width="YourValue"
     Android:layout_height="YourValue"
     ...
     Android:tint="YourColor" // this line do the magic
/>
0

Utilisez le code suivant pour modifier la couleur de votre icône à partir de xml

<ImageView
    Android:id="@+id/imageView"
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"
    ...
    Android:foregroundTintMode="src_over"
    Android:tint="Your colour"
    ...
    app:srcCompat="@Android:drawable/ic_menu_slideshow" 
/>
0
Ibiam Obinna