Android-Support-Bibliothek: getDrawable unabhängig, wenn Vektor oder nicht

Bei der Arbeit mit Android> = 5.0,

Drawable d = getResources().getDrawable(R.drawable.icon) 

Richtig analysiert das XML und gibt eine gültige Zeichnung zurück. Aber bei der 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-Datei Zeile # 2: ungültiger Drawable-Tag-Vektor

Die Lösung wäre zu verwenden

 Drawable d = VectorDrawableCompat.create(getResources(), R.drawable.icon, null); 

Aber das stürzt ab, wenn die Ressource keine Vektorressource ist:

Java.io.FileNotFoundException: Beschädigte XML-Binärdatei

Also, welcher Code anstelle der ersten Zeile verwendet werden muss, damit es mit Android 4 und Android 6 und mit Vektor- und Nicht-Vektor-Drawables funktioniert – zB unter allen Umständen wurde diese Zeile in einem Android 5.0+ Projekt verwendet? Der Support-Bibliotheksartikel erwähnt keinen Weg, diese Migration durchzuführen

  • Google Play: Du musst das Icon in deinem APK überprüfen, weil es nicht gültig ist
  • Wie man ein VectorDrawable in einer flüssigkeitsähnlichen Weise animiert?
  • Youtube Play / Pause Animierte Vektor Zeichenkette auf Android
  • VectorDrawableCompat Resources $ NotFoundException auf KitKat und unten
  • Programmatisch färben Sie einen Support-Vektor
  • Ungültiger Zeichenfolgen-Vektor
  • Ist es möglich, VectorDrawable in Buttons und TextViews mit Android zu verwenden: DrawableRight?
  • Gibt es einen einfachen Weg, um den Abstand zwischen einem Punkt und einer VectorDrawable Gruppe zu messen?
  • 3 Solutions collect form web for “Android-Support-Bibliothek: getDrawable unabhängig, wenn Vektor oder nicht”

    Ich fand die Lösung.

    Sie müssen den Support VectorDrawable in Ihrer Aktivität manuell hinzufügen.

    Versuchen Sie dies in Ihrer Tätigkeit:

     static { AppCompatDelegate.setCompatVectorFromResourcesEnabled(true); } 

    Sie sollten diesen Blogeintrag für weitere Informationen überprüfen.

    Sie können die folgende Methode verwenden, um Zeichnen von Vector Drawable in Pre 5.0 zu zeichnen.

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

    Eine andere mögliche Lösung, was ich bisher gefunden habe

     ResourcesCompat.getDrawable(context.resources, resId, theme) 

    Und Kontext sollte Ihre Tätigkeit sein (aber nicht Anwendungskontext)

    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.