NEUESTES UPDATE - Jun / 2019
Die Support-Bibliothek hat sich seit der ursprünglichen Antwort etwas geändert. Jetzt kann sogar das Android-Plugin für Gradle das PNG beim Erstellen automatisch generieren. Im Folgenden sind zwei neue Ansätze aufgeführt, die heutzutage funktionieren sollten. Weitere Informationen finden Sie hier:
PNG-Erzeugung
Gradle kann zum Zeitpunkt der Erstellung automatisch PNG-Bilder aus Ihren Assets erstellen. Bei diesem Ansatz werden jedoch nicht alle XML-Elemente unterstützt . Diese Lösung ist praktisch, da Sie nichts in Ihrem Code oder in Ihrem build.gradle ändern müssen. Stellen Sie einfach sicher, dass Sie Android Plugin 1.5.0 oder höher und Android Studio 2.2 oder höher verwenden .
Ich verwende diese Lösung in meiner App und funktioniert einwandfrei. Kein zusätzliches build.gradle- Flag erforderlich. Es sind keine Hacks erforderlich. Wenn Sie zu / build / generate / res / pngs / ... gehen , werden alle generierten PNGs angezeigt.
Wenn Sie also ein einfaches Symbol haben (da nicht alle XML-Elemente unterstützt werden), funktioniert diese Lösung möglicherweise für Sie. Aktualisieren Sie einfach Ihr Android Studio und Ihr Android-Plugin für Gradle.
Support-Bibliothek
Wahrscheinlich ist dies die Lösung, die für Sie funktioniert. Wenn Sie hierher gekommen sind, bedeutet dies, dass Ihr Android Studio die PNGs nicht automatisch generiert. Ihre App stürzt also ab.
Oder vielleicht möchten Sie nicht, dass Android Studio überhaupt PNG generiert.
Anders als bei der "Auto-PNG-Generierung", die eine Teilmenge des XML-Elements unterstützt, unterstützt diese Lösung alle XML-Tags. Sie haben also volle Unterstützung für Ihre Vektorzeichnung.
Sie müssen zuerst Ihr build.gradle aktualisieren , um es zu unterstützen:
android {
defaultConfig {
// This flag will also prevents Android Studio from generating PNGs automatically
vectorDrawables.useSupportLibrary = true
}
}
dependencies {
// Use this for Support Library
implementation 'com.android.support:appcompat-v7:23.2.0' // OR HIGHER
// Use this for AndroidX
implementation 'androidx.appcompat:appcompat:1.1.0' // OR HIGHER
}
Und dann app:srcCompat
anstelle von android:src
beim Laden verwenden VectorDrawables
. Vergiss das nicht.
Für TextView
, wenn Sie die verwenden androidx
Version des Supports Library, können Sie app:drawableLeftCompat
(oder rechts, oben, unten) stattapp:drawableLeft
Verwenden Sie im Fall von CheckBox
/ anstelle von .RadioButton
app:buttonCompat
android:button
Wenn Sie die androidx
Version der Support-Bibliothek nicht verwenden und Ihr minSdkVersion
is 17
oder höher ist oder eine Schaltfläche verwendet, können Sie versuchen, programmgesteuert über zu setzen
Drawable icon = AppCompatResources.getDrawable(context, <drawable_id>);
textView.setCompoundDrawablesWithIntrinsicBounds(<leftIcon>,<topIcon>,<rightIcon>,<bottomIcon>);
UPDATE - Jul / 2016
Sie haben VectorDrawable in der
Android Support Library 23.4.0 wieder aktiviert
Für AppCompat-Benutzer haben wir eine Opt-In- API hinzugefügt, um die Unterstützung von Vector Drawables aus Ressourcen (das in 23.2 beschriebene Verhalten) über AppCompatDelegate.setCompatVectorFromResourcesEnabled (true) wieder zu aktivieren. Beachten Sie, dass dies weiterhin Probleme mit der Speichernutzung und verursachen kann Probleme beim Aktualisieren von Konfigurationsinstanzen, daher ist diese standardmäßig deaktiviert.
Möglicherweise ist die build.gradle
Einstellung jetzt veraltet und Sie müssen sie nur für ordnungsgemäße Aktivitäten aktivieren (müssen jedoch getestet werden).
Um es jetzt zu aktivieren, müssen Sie Folgendes tun:
public class MainActivity extends AppCompatActivity {
static {
AppCompatDelegate.setCompatVectorFromResourcesEnabled(true);
}
...
}
Ursprüngliche Antwort - Apr / 2016
Ich denke, dies geschieht, weil Support Vector in der neuesten Bibliotheksversion 23.3.0 deaktiviert wurde
Nach diesem POST :
Für AppCompat-Benutzer haben wir beschlossen, die Funktionalität zu entfernen, mit der Sie aufgrund von Problemen bei der Implementierung in Version 23.2.0 / 23.2.1 (AUSGABE 205236) Vektorzeichnungen aus Ressourcen auf Geräten vor Lollipop verwenden können . Verwenden von app: srcCompat und setImageResource () funktioniert weiterhin.
Wenn Sie das Problem AUSGABE 205236 besuchen , werden sie anscheinend in Zukunft aktiviert, aber das Speicherproblem wird nicht bald behoben:
In der nächsten Version habe ich eine Opt-In-API hinzugefügt, mit der Sie die entfernte VectorDrawable-Unterstützung wieder aktivieren können. Es gibt jedoch die gleichen Einschränkungen wie zuvor (Speichernutzung und Probleme bei der Aktualisierung der Konfiguration).
Ich hatte ein ähnliches Problem. In meinem Fall habe ich also alle Symbole zurückgesetzt, die Vektoren verwenden, die von Ressourcen- zu PNG-Bildern gezeichnet werden können (da das Speicherproblem auch dann weiterhin auftritt, wenn sie eine Option zum erneuten Aktivieren bieten).
Ich bin nicht sicher, ob dies die beste Option ist, aber es behebt meiner Meinung nach alle Abstürze.