Vector de etiqueta dibujable no válido
Im que intentaba utilizar el vector drawables en dispositivos del pre lollipop. Hice todo según lo indicado aquí pero todavía consigo este choque.
Build.gradle:
- AnimatedVectorDrawable no anima
- ¿Puedo usar el archivo vectorial dibujable en el icono del menú de ActionBar?
- ¿Puedo usar un vector dibujable de la misma manera que usé un parche 9?
- Animado (VectorDrawable) animado mediante programación en tiempo de ejecución
- Android Layer-List VectorDrawable tamaño
buildscript { repositories { jcenter() } dependencies { classpath 'com.android.tools.build:gradle:2.0.0-beta6' } } apply plugin: 'com.android.application' repositories { maven { url 'http://maven.android-forever.com' } jcenter() } android { compileSdkVersion 23 buildToolsVersion "23.0.2" defaultConfig { applicationId "com.test.app" minSdkVersion 16 targetSdkVersion 22 versionCode 1 versionName "1.0" vectorDrawables.useSupportLibrary = true } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } } dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) testCompile 'junit:junit:4.12' compile 'com.android.support:appcompat-v7:23.2.0' compile 'com.android.support:design:23.2.0' compile "de.greenrobot:eventbus:2.4.0" compile 'de.greenrobot:greendao:2.1.0' compile "com.af:android-utility:1.0.0.9" compile project(':volleyplus') compile project (':libvlc') }
Triangle.xml:
<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawable="@drawable/triangle_v"/> </selector>
Triangle_v.xml
<vector xmlns:android="http://schemas.android.com/apk/res/android" android:height="100dp" android:width="100dp" android:viewportHeight="100" android:viewportWidth="100"> <path android:name="triangle" android:fillColor="#FF0000" android:pathData="m 50,0 l 50,100 -100,0 z"/> </vector>
Layout.xml
<ImageView android:layout_width="match_parent" android:layout_height="match_parent" android:background="@drawable/triangle"/>
También intenté app:srcCompat
y en ese caso, drawable apenas no muestre.
- ¿Es posible crear un VectorDrawable desde el sistema de archivos (archivo * .xml)
- ¿Hay una manera de escuchar el final de la animación en AnimatedVectorDrawables
- Programáticamente actualizar Android Vector Drawable
- ¿Cómo hacer que el vector de una aplicación extraiga el vector de una biblioteca?
- Cómo cambiar el color de la trayectoria del vector drenable en el botón de clic
- Cambiar fillColor de vector en android programaticamente
- Cómo preservar la relación de aspecto de VectorDrawable?
- Problema de renderización de VectorDrawable
Me enfrenté a un problema similar y la respuesta de @ pedja es útil. De manera más general, como se menciona en el artículo de Chris Banes sobre compatibles con dibujos vectoriales , la biblioteca de soporte funciona inyectando su versión de ImageView
sobre el sistema uno en pre-L a través de algunos ganchos. Esto implica implícitamente que se utilicen las versiones AppCompat de clases, como AppCompatActivity
.
En mi caso, el vector dibujable se usa en una vista de tipo tostada independiente sin una actividad asociada, usando el contexto de la Aplicación. AppCompatImageView
usando AppCompatImageView
en la definición de diseño xml directamente, es decir algo como
<android.support.v7.widget.AppCompatImageView android:id="@+id/some_id" android:layout_width="24dp" android:layout_height="24dp" android:src="@drawable/selector_referencing_vector_drawable"/>
Por lo tanto no hay necesidad de la magia "gancho" mecanismo. Como probado esto también funciona con la clase de Activity
sin necesidad de utilizar AppCompatActivity
. Todo lo anterior se realizó sin actualizar a 23.2.1, que abordó un problema diferente.
Este código va a funcionar con vector si está usando
VectorDrawables.useSupportLibrary = true
Y cambiar android:src
a la app:srcCompat
.
Por ejemplo,
<ImageView android:layout_width="match_parent" android:layout_height="match_parent" android:src="@drawable/triangle"/>
a
<ImageView android:layout_width="match_parent" android:layout_height="match_parent" app:srcCompat="@drawable/triangle"/>
El problema era que mi actividad no era extender AppCompatActivity
pero Activity
regular.
Esto no se especifica en ninguna documentación / ejemplo para el soporte vectorial desplegables
Tengo este problema también al cargar los vectores de un selector en dispositivos pre-lollipop:
Use AppCompatDelegate.setCompatVectorFromResourcesEnabled (true) en su método onCreate:
Establece si se pueden utilizar elementos vectoriales extraíbles en plataformas anteriores (<API 21) en los recursos android.graphics.drawable.DrawableContainer. Cuando está habilitado, AppCompat puede interceptar alguna inflación desplegable del marco, lo que permite la inflación implícita de elementos vectoriales extraíbles dentro de los recursos android.graphics.drawable.DrawableContainer.
protected final void onCreate(Bundle savedInstanceState) { AppCompatDelegate.setCompatVectorFromResourcesEnabled(true); super.onCreate(savedInstanceState); ...
Funciona con 23.2.0 o 23.4.0, no con 23.3.0. En serio Google!
En primer lugar, esta funcionalidad se lanzó originalmente en 23.2.0, pero luego encontramos algunos problemas de uso de memoria y configuración de actualización por lo que se eliminó en 23.3.0. En 23.4.0 (técnicamente una versión de corrección) hemos re-añadido la misma funcionalidad, pero detrás de una bandera que debe habilitar manualmente.
Ref: https://medium.com/@chrisbanes/appcompat-v23-2-age-of-the-vectors-91cbafa87c88#.waicp19gh
También es necesario incluir la nueva biblioteca de soporte de vectores:
compile 'com.android.support:support-vector-drawable:23.2.0'
Encontré este problema en code.google.
Parece ser la misma cuestión que usted. ¿Ayuda esto? https://code.google.com/p/android/issues/detail?id=201843
Esto es soporte-v4, appcompat-v7 bug de la biblioteca v23.2.0 aparece en la API 19. @tim proporciona un enlace a este problema de error.
Puede actualizar a la nueva versión de la biblioteca 23.2.1 y el error se soluciona ahora.
Las respuestas que se dan aquí son ignorar una situación cuando se desea añadir un drawable a una vista de texto porque da el mismo error. En mi caso tuve
<TextView .... android:drawableLeft="some_vectore_drawable" />
No pude encontrar la forma de resolver esto, así que eliminé esa línea del código xml y ponerlo en mi código java de esta manera
Drawable somevectordrable = AppCompatDrawableManager.get().getDrawable(context, R.drawable.somevectordrawable); mytextview.setCompoundDrawableWithIntrinsicBounds(somevectordrable, null, null, null);
Aclaración para el código,
-
Obtener el vector dibujable de la carpeta drawables mediante AppCompatDrawableManager
-
Establecer el dibujable que acabamos de obtener como la izquierda dibujable en nuestro textview
Si te ves usando <android.support.v7.widget.AppCompatImageView
al cargar un vector dibujable, podría ser una mejor idea extender AppCompatActivity
lugar de Activity
y volver a usar regular <ImageView...app:srcCompat="@drawable/...
- ¿Cómo obtener los extras de intención si la actividad es `singleTask`?
- Android Carga de mapa de bits de error de memoria Galaxy S3 WXGA