是否可以在Android中从xml更改材质设计图标颜色?

时间:2015-04-22 07:47:19

标签: android icons android-5.0-lollipop material-design

我实际上是想在我的应用中使用彩色图标。我已经从here下载了官方资料设计图标包。现在这个包中的所有图标都是白色,灰色或黑色。但我希望图标颜色不同。 类似于this image左侧的图标。电话和邮件图标是蓝色的。我怎么能做到这一点?

10 个答案:

答案 0 :(得分:52)

要更改图标颜色,请尝试

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

    android:tint="YourColor"
    />

注意:色调颜色涂在图像的顶部,而不是替换颜色。因此,黑色图像上的色调#80ff0000会在背景上为黑色提供50%的红色,而不是50%的红色。即这不等同于iOS模板图像。

答案 1 :(得分:32)

您可以使用appcompat支持库中的TintImageView,然后通过调用android:backgroundTint将图像视图着色为一种颜色,对图像视图进行着色/着色。


<强> 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着色为绿色,这意味着它会将图像视图的每个像素着色为绿色。

答案 2 :(得分:11)

我一直在寻找相同的东西,但要在代码中动态更改它。我希望这有助于某人寻找同样的事情。

为图标创建一个ImageView,并在该视图上使用setColorFilter。

ImageView imageViewIcon = (ImageView) listItem.findViewById(R.id.imageViewIcon);
imageViewIcon.setColorFilter(getContext().getResources().getColor(R.color.blue));

答案 3 :(得分:4)

<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 =&#34;#ca0f0f&#34;

答案 4 :(得分: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));

虽然以上为我做了诀窍,但对于我的使用案例,Suggicient是使用android:tint

答案 5 :(得分:1)

如何更改XML中的材质图标颜色

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

答案 6 :(得分:0)

是的,这是可能的,并且使用此库很简单: https://github.com/jrvansuita/IconHandler

您可以轻松地称之为:

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

答案 7 :(得分:0)

使用以下代码从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" 
/>

答案 8 :(得分:-1)

添加到Murali所说的内容,制作具有不同填充颜色的多个drawable。

然后在需要时添加到您的代码中:

imageView.setImageResource(R.drawable.drawable_with_different_color)

不:imageView.setBackgroundResource()

答案 9 :(得分:-3)

由于图标文件是.png格式,您应该使用您已创建图标的工具更改颜色。并使用Image Asset将其添加到项目中。