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);