support library last java android android-support-library android-vectordrawable android-support-design

java - library - com.android.support:support-v4 28



Biblioteca de soporte de Android: getDrawable independiente si vector o no (3)

Cuando se trabaja con Android> = 5.0,

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

Analiza correctamente el XML y devuelve un dibujo válido. Pero cuando se usa la nueva biblioteca de soporte Vector Drawable (versión 23.4, Gradle 2.1.2), este código falla en Android 4 .

android.content.res.Resources $ NotFoundException

...

Causado por: org.xmlpull.v1.XmlPullParserException: Línea de archivo XML binario # 2: vector de etiqueta drawable no válido

La solución sería utilizar

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

Pero esto se bloquea si el recurso no es un recurso vectorial:

java.io.FileNotFoundException: archivo binario XML dañado

Entonces, ¿qué código debe usarse en lugar de la primera línea para que funcione con Android 4 y Android 6 y con dibujables vectoriales y no vectoriales? Por ejemplo, en todas las circunstancias, esta línea se usó en un proyecto de Android 5.0+. El artículo de la biblioteca de soporte no menciona una forma de realizar esta migración.


Encontré la solución.

Debe agregar el soporte VectorDrawable en su actividad manualmente.

prueba esto en tu actividad:

static { AppCompatDelegate.setCompatVectorFromResourcesEnabled(true); }

Debes revisar esta entrada de blog para más información.


Otra posible solución a lo que encontré hasta ahora.

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

y el contexto debe ser su actividad (pero no el contexto de la aplicación)


Puede usar el siguiente método para obtener Drawable de Vector Drawable en la versión 5.0.

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