构建时PNG生成不支持对其他资源的引用

问题描述 投票:109回答:8

AndroidStudio 3.0 / Android Gradle插件3.0

<vector>
  <path android:fillColor="@color/image_button_disabled"/>
</vector>

我收到此错误:

构建时PNG生成不支持对其他资源的引用

是否有可能解决它或者它是一个弃用的解决方案?

android resources android-studio-3.0
8个回答
246
投票

在你的应用程序build.gradle中添加以下行:

defaultConfig{
   vectorDrawables.useSupportLibrary = true
}

有关详细信息,请参阅Android Developers: Vector Drawables Backward Compatibility Solution


12
投票

您需要直接使用十六进制代码而不是引用资源。

<vector
  <path
    android:fillColor="#FFF"/></vector>

8
投票

这个错误的上下文多一点:

  • Android 5.0(API级别21)是第一个正式支持矢量绘图的版本。
  • 如果使用低于20的minSdkVersion,则有两个矢量drawable解决方案 Android Studio的Vector Asset Studio生成PNG。请看看Android Studio document。但是,构建时PNG生成不支持对其他资源的引用。 使用支持库
  • 或者,对于minSdkVersion使用21或更高版本

对于支持库,请在build.gradle文件中添加一条语句:

android {
  defaultConfig {
    vectorDrawables.useSupportLibrary = true
  }
}

dependencies {
  compile 'com.android.support:appcompat-v7:23.2.0'
}

4
投票

如果你的minSdkVersion是21,你可以通过添加以下行来禁用PNG的生成:

// set to an empty list to disable the feature
vectorDrawables.generatedDensities = [] 

删除此行仍将生成PNG。

资料来源:http://google.github.io/android-gradle-dsl/current/com.android.build.gradle.internal.dsl.VectorDrawablesOptions.html


3
投票

不要在Vector drawable中的fillColor属性中使用colorReference,只需使用hexa代码

像这样用

<vector xmlns:android="http://schemas.android.com/apk/res/android"
    android:width="24dp"
    android:height="24dp"
    android:viewportWidth="24.0"
    android:viewportHeight="24.0">
<path
    android:fillColor="#1abc9c"
    android:pathData="M9,11L7,11v2h2v-2zM13,11h-2v2h2v-2zM17,11h-2v2h2v-2zM19,4h-1L18,2h-2v2L8,4L8,2L6,2v2L5,4c-1.11,0 -1.99,0.9 -1.99,2L3,20c0,1.1 0.89,2 2,2h14c1.1,0 2,-0.9 2,-2L21,6c0,-1.1 -0.9,-2 -2,-2zM19,20L5,20L5,9h14v11z"/>

而不是这个

<vector xmlns:android="http://schemas.android.com/apk/res/android"
    android:width="24dp"
    android:height="24dp"
    android:viewportWidth="24.0"
    android:viewportHeight="24.0">
<path
    android:fillColor="@color/colorPrimary"
    android:pathData="M9,11L7,11v2h2v-2zM13,11h-2v2h2v-2zM17,11h-2v2h2v-2zM19,4h-1L18,2h-2v2L8,4L8,2L6,2v2L5,4c-1.11,0 -1.99,0.9 -1.99,2L3,20c0,1.1 0.89,2 2,2h14c1.1,0 2,-0.9 2,-2L21,6c0,-1.1 -0.9,-2 -2,-2zM19,20L5,20L5,9h14v11z"/>


0
投票

我已经能够通过以下方式解决这个问题:

  1. 创建一个drawable-v21文件夹并复制所有使用变量的可绘制xmls
  2. 在原始drawable文件夹中更改所有图标以使用静态颜色

这样编译器就可以工作了


0
投票

我认为你正在使用android:fillColor="@color/image_button_disabled"这个代码用于矢量drawable。

// image_button_disabled.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:color="@color/circular_image_color_pressed" android:state_pressed="true" />
    <item android:color="@color/circular_image_color_normal" />
</selector>

它不受支持。

只需用android:fillColor="#c4ca5e"替换它


0
投票

加起来@mwa91 answer

如果您需要动态显示drawable,但您没有时间更新布局并使用@mwa91 answer并将所有android:src="@drawable/..."属性更改为app:srcCompat="@drawable/...",您可以始终在drawable中使用十六进制颜色值,然后在ImageView中着色drawable :

<ImageView
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:src="@drawable/your_drawable"
      android:tint="@color/image_button_disabled"
      />
© www.soinside.com 2019 - 2024. All rights reserved.