Bei der Arbeit mit Android> = 5.0
Drawable d = getResources().getDrawable(R.drawable.icon)
Parst das XML korrekt ein und gibt eine gültige drawable zurück. Bei Verwendung der neuen Vector Drawable Support Library (Version 23.4, Gradle 2.1.2) stürzt dieser Code unter Android 4 ab.
Android.content.res.Resources $ NotFoundException
...
Verursacht durch: org.xmlpull.v1.XmlPullParserException: Binäre XML-Dateizeile # 2: Ungültiger Zeichenvektor
Die Lösung wäre zu verwenden
Drawable d = VectorDrawableCompat.create(getResources(), R.drawable.icon, null);
Dies stürzt jedoch ab, wenn die Ressource keine Vektorressource ist:
Java.io.FileNotFoundException: Beschädigte XML-Binärdatei
Welcher Code muss also anstelle der ersten Zeile verwendet werden, damit er mit Android 4 und Android 6 und mit Vektor- und Nicht-Vektor-Drawables funktioniert - z. wurde diese Linie unter allen Umständen in einem Android 5.0+ -Projekt verwendet? Im Artikel zur Support-Bibliothek wird keine Möglichkeit zur Durchführung dieser Migration erwähnt
Sie können die folgende Methode verwenden, um in Draw 5.0 Vektor Drawable zeichnen zu können.
Drawable drawable = AppCompatResources.getDrawable(mContext, mImageTitleResId);
Ich habe die Lösung gefunden.
Sie müssen die Unterstützung VectorDrawable manuell in Ihre Aktivität einfügen.
versuchen Sie dies in Ihrer Aktivität:
static {
AppCompatDelegate.setCompatVectorFromResourcesEnabled(true);
}
Sie sollten diesen Blogeintrag für weitere Informationen überprüfen.
eine andere mögliche lösung was ich bisher gefunden habe
ResourcesCompat.getDrawable(context.resources, resId, theme)
und Kontext sollte Ihre Aktivität sein (aber nicht Anwendungskontext)