web-dev-qa-db-ja.com

AndroidでXMLからマテリアルデザインアイコンの色を変更することは可能ですか?

私は実際にアプリで色付きのアイコンを使用しようとしています。 here から公式のマテリアルデザインアイコンパックをダウンロードしました。このパックのすべてのアイコンは、白、グレー、または黒になりました。しかし、アイコンの色を変えたいです。 この画像 の左側のアイコンのようなもの。電話の電話とメールのアイコンは青です。どうすればこれを達成できますか?

28
Akshay

アイコンの色を変更するには

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

    Android:tint="YourColor"
    />

注:色合いは、代替色ではなく、画像の上にペイントされます。 #80ff0000黒の画像では、背景の50%の赤ではなく、黒の50%の赤が得られます。つまりこれはiOSテンプレート画像と同等ではありません。

53
Yogesh Borkhade

Appcompatサポートライブラリ内でTintImageViewを使用し、_Android:backgroundTint_を呼び出すだけで画像ビューを着色/着色して、画像ビューを1つの色に着色することができます。


Xml

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

または

_<ImageView 
Android:tint="the_color_you_want"/>
_

プログラム的に

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


したがって、上記のxmlは、imageViewを緑色に着色します。つまり、緑色に見えるimageviewの各ピクセルを着色します。

32
Rod_Algonquin

私は同じことを探していましたが、コードで動的に変更することでした。これが同じものを探している人に役立つことを願っています。

アイコンのImageViewを作成し、そのビューでsetColorFilterを使用します。

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>

android:fillColor = "#ca0f0f"を変更して色を変更します

4
Murali

XMLでマテリアルアイコンの色を変更する方法

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

このスレッドにはすでに多くの選択肢があります。おそらく、便利だと思う人のためにもう1つ追加できます。

Drawableクラスを使用することもできます。コードは次のとおりです。

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

上記は私のためにトリックをしましたが、私のユースケースでは、Android:tint

1
Neil B

はい、それは可能であり、このライブラリを使用すると簡単です: https://github.com/jrvansuita/IconHandler

これを簡単に呼び出すことができます:

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

次のコードを使用して、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