vectorial support soporte para máquinas maquinas maquina machine las funciona ejemplos dummies como android appcompat android-vectordrawable

android - soporte - support vector regression



AppCompat 23.3 ¿Los vectores de soporte ya no funcionan? (3)

Para usar vectores como compositeDrawables (ej. Para vista de texto) sin usar

AppCompatDelegate.setCompatVectorFromResourcesEnabled(true);

lo que lleva a un uso de memoria alto documentado, solo inflar el vector usando

Drawable drawable = AppCompatResources.getDrawable( getContext(), R.drawable.vector_resID ); if( drawable != null ) drawable.setBounds( 0, 0, iconSize, iconSize ); TextViewCompat.setCompoundDrawablesRelative( textView, null, null, drawable, null);

Así funciona el navDrawer.

Estaba usando los vectores dibujables de soporte agregados en la biblioteca de soporte 23.2 junto con AppCompat. Estaba usando vectores dibujables tanto con la app:srcCompat como dentro de un StateListDrawable para poder usarlos con android:drawableLeft drawableLeft para mi TextView.

Desde la actualización a la versión 23.3.0 de AppCompat, solo funcionan los vectores en la app:srcCompat . Cada vez que me refiero a la otra manera consigo

FATAL EXCEPTION: main java.lang.RuntimeException: Unable to start activity ComponentInfo{com.my.package.name/.MainActivity}: android.view.InflateException: Binary XML file line #8: Error inflating class Button ... Caused by: android.view.InflateException: Binary XML file line #8: Error inflating class Button ... Caused by: org.xmlpull.v1.XmlPullParserException: Binary XML file line #14: invalid drawable tag vector at android.graphics.d

¿Qué cambió eso ahora hace que mis matas de vectores de soporte fallen en algunos casos?


Se agregó el soporte VectorDrawable para pre-Lollipop en la biblioteca de soporte 23.2.0, y luego se eliminó parcialmente en 23.3.0. En 23.4.0 y superior (al menos 25.1.0), la parte eliminada está de vuelta pero detrás de una bandera opcional (porque viene con un precio).

En resumen: en la biblioteca de soporte 23.4.0 a al menos 25.1.0, puede hacer que VectorDrawable funcione en algunos casos .

He hecho este diagrama para ayudar.


Actualización: Lo habilitan nuevamente en la Biblioteca de Soporte 23:

Para los usuarios de AppCompat, hemos agregado una API opt-in para volver a habilitar el soporte Vector Drawables de los recursos (el comportamiento encontrado en 23.2) a través de AppCompatDelegate.setCompatVectorFromResourcesEnabled (true); - tenga en cuenta que esto todavía puede causar problemas con el uso de la memoria y problemas con la actualización de las instancias de Configuración, por lo tanto, está deshabilitado de forma predeterminada.

Mira este enlace: 23.4.0 disponible ahora
-------------------------------------------------- ---------

Según el anuncio de lanzamiento para Android Support Library 23.3 :

Para los usuarios de AppCompat, hemos decidido eliminar la funcionalidad que le permite usar vectores dibujables de recursos en dispositivos pre-Lollipop debido a problemas encontrados en la implementación en la versión 23.2.0 / 23.2.1 [ https://code.google.com/p/android/issues/detail?id=205236 , https://code.google.com/p/android/issues/detail?id=204708 ]. El uso de la app:srcCompat y setImageResource() sigue funcionando.

Así que este es un cambio de comportamiento esperado. Tendrá que usar gráficos no vectoriales para cualquier caso no manejado por srcCompat .

Si desea continuar utilizando vectores antes de API 21, puede eliminar la línea

vectorDrawables.useSupportLibrary = true

(o el equivalente si usas el plugin 1.5 Gradle como se muestra en la publicación del blog 23.2 ).

Esto hará que Android Studio genere PNG en tiempo de compilación para aplicaciones con minSdkVersion menos que API 21 mientras usa sus vectores en dispositivos API 21+, lo que le permite mantener el mismo código que con 23.2.1 a un costo de tamaño de APK adicional.