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?
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.
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ě.
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));
<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"
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
.
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();
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
/>
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"
/>