Android Studio现在在21+上支持矢量资产,并将在编译时为低版本生成png。我有一个矢量资产(来自材质图标),我想改变填充颜色。这适用于21+,但生成的png不改变颜色。有办法做到这一点吗?

<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="@color/primary" android:pathData="M9,16.17L4.83,12l-1.42,1.41L9,19 21,7l-1.41,-1.41z"/>


当前回答

目前可行的解决方案是 android: fillColor = " # FFFFFF "

除了在向量中硬编码,什么都不管用

<vector xmlns:android="http://schemas.android.com/apk/res/android"
    android:width="24dp"
    android:height="24dp"
    android:viewportWidth="24.0"
      android:fillColor="#FFFFFF"
    android:viewportHeight="24.0">
<path
    android:fillColor="#FFFFFF"
    android:pathData="M15.5,14h-0.79l-0.28,-0.27C15.41,12.59 16,11.11 16,9.5 16,5.91 13.09,3 9.5,3S3,5.91 3,9.5 5.91,16 9.5,16c1.61,0 3.09,-0.59 4.23,-1.57l0.27,0.28v0.79l5,4.99L20.49,19l-4.99,-5zm-6,0C7.01,14 5,11.99 5,9.5S7.01,5 9.5,5 14,7.01 14,9.5 11.99,14 9.5,14z"/>

然而,填充色和色调可能很快就会起作用。请参阅此讨论以了解更多信息:

https://code.google.com/p/android/issues/detail?id=186431

此外,颜色可能会粘在缓存中,所以删除所有用户的应用程序可能会有所帮助。

其他回答

要改变矢量图像的颜色,你可以直接使用android:tint="@color/colorAccent"

<ImageView
        android:id="@+id/ivVectorImage"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/ic_account_circle_black_24dp"
        android:tint="@color/colorAccent" />

以编程方式改变颜色

ImageView ivVectorImage = (ImageView) findViewById(R.id.ivVectorImage);
ivVectorImage.setColorFilter(getResources().getColor(R.color.colorPrimary));

更新:AppCompat支持

其他答案怀疑android:tint将只在21+设备上工作,AppCompat(v23.2.0及以上)现在提供了向后兼容的tint属性处理。

因此,行动的过程将是使用AppCompatImageView和app:srcCompat(在AppCompat命名空间)而不是android:src(android命名空间)。

下面是一个例子(AndroidX: This is AndroidX .appcompat.widget. appcompatimageview;)):

<android.support.v7.widget.AppCompatImageView
        android:id="@+id/credits_material_icon"
        android:layout_width="20dp"
        android:layout_height="20dp"
        android:layout_marginBottom="8dp"
        android:layout_marginLeft="16dp"
        android:layout_marginStart="16dp"
        android:scaleType="fitCenter"
        android:tint="#ffd2ee"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:srcCompat="@drawable/ic_dollar_coin_stack" />

别忘了在gradle中启用向量可绘制支持:

vectorDrawables.useSupportLibrary = true 

Android工作室现在支持矢量前棒棒糖。不进行PNG转换。你仍然可以改变你的填充颜色,它会工作。

在ImageView中,使用

 app:srcCompat="@drawable/ic_more_vert_24dp"

在gradle文件中,

 // Gradle Plugin 2.0+  
 android {  
   defaultConfig {  
     vectorDrawables.useSupportLibrary = true  
   }  
 }  

 compile 'com.android.support:design:23.4.0'

如果vector资产在CardView中,请尝试 card_view:tint="@color/secondary"在ImageView中。 注意:用你想要的颜色替换@color/secondary。

use

android:drawableTint="@color/primary"

在activity_main.xml