it-swarm-eu.dev

Je možné změnit barvu ikony designu z XML v Android?

Ve skutečnosti se snažím používat barevné ikony v aplikaci. Stáhl jsem si oficiální sadu ikon pro design materiálu z zde . Všechny ikony v tomto balení jsou buď bílé, šedé nebo černé. Ale chci, aby ikony měly jinou barvu. Něco jako ikony na levé straně v tento obrázek . Ikony telefonu a pošty telefonu jsou modré. Jak toho dosáhnout?

28
Akshay

Pro změnu ikony vyzkoušejte barvu

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

    Android:tint="YourColor"
    />

Poznámka: Barva odstínu je natřena na vrchu obrazu, nikoli náhradním odstínem. Tak odstín #80ff0000 na černém obrázku vám dává 50% červeně na černé, ne 50% červenou na pozadí. Tj. to není ekvivalentní k obrázkům iOS šablony.

48
Yogesh Borkhade

Můžete použít TintImageView v knihovně podpory aplikací a poté tónování/zbarvení obrázku je jednoduše voláním Android:backgroundTint, aby se obraz zobrazil do jedné barvy.


Xml

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

nebo 

<ImageView 
Android:tint="the_color_you_want"/>

Programově

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


To znamená, že výše uvedený xml bude vybarvovat imageView tak, aby byl zbarven zeleně, což znamená, že zbarví každý pixel obrazu, který je viditelný zeleně.

32
Rod_Algonquin

Hledal jsem to samé, ale změnil jsem to dynamicky v kódu. Doufám, že to pomůže někomu, kdo hledá stejnou věc.

Vytvořte ImageView pro ikonu a použijte setColorFilter na tomto pohledu.

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>

změníte barvu změnou Android: fillColor = "# ca0f0f"

4
Murali

Mnoho alternativ zde již v tomto vlákně. Možná bych mohl přidat ještě jednu pro toho, kdo to považuje za vhodný:

Můžete také použít třídu Drawable, kód je následující

    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));

Ačkoliv to pro mě udělalo trik, pro můj případ použití jsem použil Android:tint.

1
Neil B

Ano, je to možné a je to jednoduché pomocí této knihovny: https://github.com/jrvansuita/IconHandler

Můžete to snadno zavolat:

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

Jak změnit barvu ikony materiálu v XML

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

Chcete-li změnit barvu ikony z xml, použijte následující kód

<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