webentwicklung-frage-antwort-db.com.de

Android Support Library: Unabhängig von getDrawable, ob Vektor oder nicht

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

20
PhilLab

Sie können die folgende Methode verwenden, um in Draw 5.0 Vektor Drawable zeichnen zu können.

Drawable drawable = AppCompatResources.getDrawable(mContext, mImageTitleResId);
37
Thinker Luffy

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.

6
jmarkstar

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)

1
orium