Diğer kaynaklara yapılan başvurular, derleme sırasında PNG oluşturma tarafından desteklenmez


131

AndroidStudio 3.0 / Android Gradle eklentisi 3.0

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

Bu hatayı alıyorum:

diğer kaynaklara başvurular, derleme sırasında PNG oluşturma tarafından desteklenmez

Çözmek mümkün olacak mı yoksa kullanımdan kaldırılmış bir çözüm mü?


İlgili konu - Android Studio 3.0'a güncellendi ve bu sorunu alıyorum . Yine de çözüm tamamen aynı.
RBT

Yanıtlar:


315

API SDK <24'ü desteklemek için uygulamanıza aşağıdaki satırı ekleyin build.gradle:

defaultConfig{
   vectorDrawables.useSupportLibrary = true
}

MinSdkVersion 24 veya daha yüksekse, sorununuz kendiliğinden çözülecektir çünkü VectorDrawables bu API ile başlayan tam desteğe sahiptir.

Ayrıntılar için Android Geliştiricileri: Vector Drawables Geriye Dönük Uyumluluk Çözümü'ne bakın.


4
Ancak sorun neden ortaya çıkıyor ve yukarıdaki çözüm bir hızlı düzeltme mi yoksa iyi bir strateji mi?
Pranaysharma


1
not: useSupportLibrary benim için yanlış çözüm (min. SDK 16, hedef 26), uygulama başlangıçta çöküyor. Bunu kaldırmam, vektörlerden @color'u kaldırmam ve tüm android: fillColor = parçalarını manuel olarak arayıp değiştirmem gerekiyordu. Aslında çok hızlı, 10 saniye sürüyor
djdance

Bu satırı nereye eklerim?
Roymunson

@Roymunson android anahtar içinde. Wonil'in bu konudaki cevabına bir bakın .
RBT

14

onaltılık kodu doğrudan bir kaynağa atıfta bulunmadan kullanmanız gerekir.

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

1
bu bir regresyon versiyonudur ... eğer rengi değiştirmek isterseniz, tek tek değiştirebilirsiniz ... Renk dosyasında referans yapmak ve değiştirmek daha kolaydır.
langme

orada maalesef uygulamanızın çalışması için tek yol budur veya gradle sürümünüzü
düşürmeniz gerekir

3
Bende de aynı sorun var. Daha önce iyi çalışan bir özellik neden devre dışı bırakılsın? Bu bir hata olabilir mi?
joaomgcd

AS3'e yeni güncelledim ve bu sorunu da aldım. Bu özellik neden kaldırılsın?
Marty

1
Bu bir geçici çözüm olarak çalışır, ancak "doğru" yanıt, @ mwa91'in vectorDrawables.useSupportLibrary = truesizin build.gradle.
Sean Barbeau

10

Bu hata için biraz daha fazla bağlam:

  • Android 5.0 (API seviyesi 21), vektör çizimlerini resmi olarak destekleyen ilk sürümdü.
  • 20'den düşük minSdkVersion kullanıyorsanız, vektör çekilebilir için iki çözüm vardır.
    • Android Studio'nun Vektör Varlık Stüdyosu PNG oluşturur. Lütfen Android Studio belgesine bir göz atın . Ancak, diğer kaynaklara yapılan başvurular, derleme zamanı PNG oluşturma tarafından desteklenmez.
    • Destek kitaplığını kullan
  • Veya minSdkVersion için 21 veya üstünü kullanın

Destek kitaplığı için build.gradle dosyanıza bir ifade ekleyin:

android {
  defaultConfig {
    vectorDrawables.useSupportLibrary = true
  }
}

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

@MikeHanafey Lütfen minSdkVersion'ın neden 24 olması gerektiğini belirtebilir misiniz? Teşekkürler.
Wonil

Aşağıdaki mesaj minSdkVersion 24'e yükseltilmedikçe ortaya çıkar. Bir açıklamam yok ve bunu gradle oluşturma başarılı olana kadar değeri artırarak buldum. Hata: java.lang.RuntimeException: java.lang.RuntimeException: ./src/main/res/drawable/ic_selection_right_widen.xml: android özniteliği işlenemiyor: fillColor = "@ color / kb_key_long_press_available": diğerlerine referanslar kaynaklar, derleme zamanı PNG oluşturma tarafından desteklenmez. Ayrıntılar için developer.android.com/tools/help/vector-asset-studio.html adresine bakın.
Mike Hanafey

3
@MikeHanafey minSdkVersion yalnızca android: filltype kullanıyorsanız 24 olmalıdır, bu bazen Android Vector Asset otomatik olarak yerleştirilir. Sadece kurtulun.
Simone

1
@Simone Öneri için teşekkürler. Benim durumumdaki sorun buydu.
Abdul Rehman Yawar Khan

varsayılan değerdirfillType , nonZeroancak yalnızca evenOddbelirli durumlarda farklılık gösterir : w3.org/TR/SVG/painting.html#FillRuleProperty
hmac

4

Vector drawable'daki fillColor özniteliğinde colorReference kullanmayın sadece hexa kodunu kullanın

bunun gibi kullan

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

bunun yerine

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


2
Bu bir yama, tüm çekilebilir öğeleri kopyalamadan uygulamamı yeniden temalandırabilmek istiyorum, ayrıca vektörel tutmak yerine png oluşturuyor. İnsanlar @ mwa91'in çözümünü kullanmalıdır.
Kikiwa


0

Aşağıdakileri yaparak bu sorunu çözmeyi başardım:

  1. çekilebilir bir v21 klasörü oluşturun ve burada değişkenler kullanan tüm çekilebilir xml'lerinizi kopyalayın
  2. orijinal çekilebilir klasörde tüm simgeleri statik bir renk kullanacak şekilde değiştirin

Bu şekilde derleyici çalışacak


1
Evet, muhtemelen API 21'in vektör çizimlerini yerel olarak destekleyen Android 5.0'ı (Lollipop) desteklemesi nedeniyle. Ancak, daha eski sürümlere sahip cihazlarda hiç uygun görsel olmayabilir: developer.android.com/guide/topics/graphics/…
PointedEars

0

Sanırım android:fillColor="@color/image_button_disabled"bu kodu vektör çizilebilir için kullanıyorsunuz .

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

Desteklenmiyor.

Sadece değiştir android:fillColor="#c4ca5e"


0

@ Mwa91 cevabına kadar eklemek için .

Eğer çekilebilir dinamik tema kullanımını gerekir, ancak Düzenlerinizi güncellemek için zaman var ve birlikte gitmez mwa91 @ cevap ve tüm değiştirmek android:src="@drawable/..."için özelliklerini app:srcCompat="@drawable/..."her zaman çekilebilir içinde altılık renk değeri kullanabilir ve daha sonra ImageView drawable tonu:

<ImageView
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:src="@drawable/your_drawable"
      android:tint="@color/image_button_disabled"
      />
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.