Wtyczka AndroidStudio 3.0 / Android Gradle 3.0
<vector>
<path android:fillColor="@color/image_button_disabled"/>
</vector>
Otrzymuję ten błąd:
odniesienia do innych zasobów nie są obsługiwane przez generowanie plików PNG w czasie kompilacji
Czy będzie można go rozwiązać, czy jest to przestarzałe rozwiązanie?
android
resources
android-studio-3.0
langme
źródło
źródło
Odpowiedzi:
Aby obsługiwać API SDK <24, dodaj następujący wiersz do swojej aplikacji
build.gradle
wewnątrzandroid
bloku:defaultConfig { vectorDrawables.useSupportLibrary = true }
Jeśli Twoja minSdkVersion ma 24 lub nowszą wersję, problem zostanie rozwiązany samodzielnie, ponieważ VectorDrawables ma pełne wsparcie począwszy od tego interfejsu API.
Aby uzyskać szczegółowe informacje, zobacz Android Developers: Vector Drawables Backward Compatibility Solution .
źródło
musisz użyć kodu szesnastkowego bezpośrednio, nie odnosząc się do zasobu.
<vector <path android:fillColor="#FFF"/></vector>
źródło
vectorDrawables.useSupportLibrary = true
do swojegobuild.gradle
.Trochę więcej kontekstu dla tego błędu:
Aby uzyskać bibliotekę wsparcia, dodaj instrukcję do pliku build.gradle:
android { defaultConfig { vectorDrawables.useSupportLibrary = true } } dependencies { compile 'com.android.support:appcompat-v7:23.2.0' }
źródło
fillType
jest,nonZero
ale różni się tylkoevenOdd
w niektórych przypadkach: w3.org/TR/SVG/painting.html#FillRulePropertyNie używaj colorReference w atrybucie fillColor w Vector drawable, po prostu użyj kodu szesnastkowego
używać w ten sposób
<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"/>
zamiast tego
<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"/>
źródło
Jeśli twoja minSdkVersion ma 21, możesz wyłączyć generowanie PNG, dodając ten wiersz:
// set to an empty list to disable the feature vectorDrawables.generatedDensities = []
Usunięcie tej linii nadal będzie generować pliki PNG.
Źródło: http://google.github.io/android-gradle-dsl/current/com.android.build.gradle.internal.dsl.VectorDrawablesOptions.html
źródło
Udało mi się to obejść, wykonując następujące czynności:
W ten sposób kompilator będzie działał
źródło
Myślę, że używasz
android:fillColor="@color/image_button_disabled"
tego kodu do rysowania wektorów.// 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>
To nie jest obsługiwane.
Po prostu zastąp go
android:fillColor="#c4ca5e"
źródło
Aby dodać do @ mwa91 odpowiedź .
W przypadku, gdy potrzebujesz dynamicznego motywu do rysowania, ale nie masz czasu, aby zaktualizować swoje układy i przejść z odpowiedzią @ mwa91 i zmienić wszystkie atrybuty na , zawsze możesz użyć wartości koloru szesnastkowego w rysunkach, a później odcień rysunku do rysowania w ImageView:
android:src="@drawable/..."
app:srcCompat="@drawable/..."
<ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/your_drawable" android:tint="@color/image_button_disabled" />
źródło