web-dev-qa-db-ja.com

他のリソースへの参照はビルド時のPNG生成ではサポートされていません

AndroidStudio 3.0/Android Gradleプラグイン3.0

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

私はこのエラーが出ます:

他のリソースへの参照はビルド時のPNG生成ではサポートされていません

それを解決することは可能でしょうか、それとも廃止予定のソリューションですか?

110
langme

build.gradleアプリに次の行を追加します。

defaultConfig{
   vectorDrawables.useSupportLibrary = true
}

詳細については、 Android Developers:Vector Drawablesの下位互換性ソリューション を参照してください。

235
mwa91

リソースを参照せずに直接16進コードを使用する必要があります。

<vector
  <path
    Android:fillColor="#FFF"/></vector>
11
Oussema Aroua

このエラーについてもう少し詳しく説明します。

  • Android 5.0(APIレベル21)は、ベクトルドロアブルを正式にサポートする最初のバージョンです。
  • 20未満のminSdkVersionを使用する場合は、ベクトル描画可能な2つの解決策があります。
    • Android StudioのVector Asset StudioはPNGを生成します。ぜひご覧ください Android Studioドキュメント 。しかし、他のリソースへの参照はビルド時のPNG生成ではサポートされていません。
    • サポートライブラリを使用する
  • または、minSdkVersionに21以上を使用してください。

サポートライブラリの場合は、build.gradleファイルにステートメントを追加します。

Android {
  defaultConfig {
    vectorDrawables.useSupportLibrary = true
  }
}

dependencies {
  compile 'com.Android.support:appcompat-v7:23.2.0'
}
7
Wonil

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

4
user40797

ヘキサコードを使用するだけで、Vector drawableのfillColor属性でcolorReferenceを使用しないでください。

このように使う

<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"/>
3
saigopi

私は次のようにしてこれを回避することができました:

  1. drawable-v21フォルダを作成し、そこに変数を使用するすべてのdrawable xmlをコピーします。
  2. 元のドロアブルフォルダ内のすべてのアイコンを静的色を使用するように変更します。

このようにコンパイラは動作します

0
joaomgcd

@ mwa91まで合計すると になります。

動的なテーマ設定が必要な場合は、レイアウトを更新して を実行する時間はありません。@ mwa91answer し、すべてのAndroid:src="@drawable/..."属性をapp:srcCompat="@drawable/..."に変更すると、いつでもdrawableで16進数のカラー値を使用して、後でImageViewでそのdrawableを着色することができます。

<ImageView
      Android:layout_width="wrap_content"
      Android:layout_height="wrap_content"
      Android:src="@drawable/your_drawable"
      Android:tint="@color/image_button_disabled"
      />
0
TheTechWolf

私はあなたがAndroid:fillColor="@color/image_button_disabled"このベクトルをベクトルドロアブルのために使っていると思います。

// 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