ÚLTIMA ACTUALIZACIÓN - Jun / 2019
La biblioteca de soporte ha cambiado un poco desde la respuesta original. Ahora, incluso el complemento de Android para Gradle puede generar automáticamente el PNG en el momento de la compilación. Entonces, a continuación hay dos enfoques nuevos que deberían funcionar en estos días. Puedes encontrar más información aquí:
Generación PNG
Gradle puede crear automáticamente imágenes PNG a partir de sus activos en el momento de la compilación. Sin embargo, en este enfoque, no se admiten todos los elementos xml . Esta solución es conveniente porque no necesita cambiar nada en su código o en su build.gradle. Solo asegúrese de estar utilizando el complemento de Android 1.5.0 o superior y Android Studio 2.2 o superior .
Estoy usando esta solución en mi aplicación y funciona bien. No se necesita una bandera build.gradle adicional . No es necesario ningún truco. Si va a / build / generate / res / pngs / ... puede ver todos los PNG generados.
Entonces, si tiene algún ícono simple (ya que no todos los elementos xml son compatibles), esta solución puede funcionar para usted. Simplemente actualice su Android Studio y su complemento de Android para Gradle.
Biblioteca de soporte
Probablemente, esta es la solución que funcionará para usted. Si vino aquí, significa que su Android Studio no está generando los PNG automáticamente. Entonces, tu aplicación falla.
O tal vez, no desea que Android Studio genere ningún PNG.
A diferencia de la "generación Auto-PNG" que admite un subconjunto de elementos XML, esta solución admite todas las etiquetas xml. Por lo tanto, tiene soporte completo para su diseño vectorial.
Primero debe actualizar su build.gradle para admitirlo :
android {
defaultConfig {
// This flag will also prevents Android Studio from generating PNGs automatically
vectorDrawables.useSupportLibrary = true
}
}
dependencies {
// Use this for Support Library
implementation 'com.android.support:appcompat-v7:23.2.0' // OR HIGHER
// Use this for AndroidX
implementation 'androidx.appcompat:appcompat:1.1.0' // OR HIGHER
}
Y luego, use en app:srcCompat
lugar de android:src
mientras cargaVectorDrawables
. No olvide esto.
Porque TextView
, si está usando la androidx
versión de la biblioteca de soporte, puede usar app:drawableLeftCompat
(o derecha, arriba, abajo) en lugar deapp:drawableLeft
En caso de CheckBox
/ RadioButton
, use en app:buttonCompat
lugar deandroid:button
.
Si no está utilizando la androidx
versión de la biblioteca de soporte y su minSdkVersion
es 17
o superior o está utilizando un botón, puede intentar configurar mediante programación a través de
Drawable icon = AppCompatResources.getDrawable(context, <drawable_id>);
textView.setCompoundDrawablesWithIntrinsicBounds(<leftIcon>,<topIcon>,<rightIcon>,<bottomIcon>);
ACTUALIZACIÓN - Jul / 2016
Reactivaron ese VectorDrawable en la
biblioteca de soporte de Android 23.4.0
Para los usuarios de AppCompat , hemos agregado una API opt-in para volver a habilitar el soporte Vector Drawables de los recursos (el comportamiento que se encuentra en 23.2) a través de AppCompatDelegate.setCompatVectorFromResourcesEnabled (verdadero) - tenga en cuenta que esto aún puede causar problemas con el uso de la memoria y problemas al actualizar las instancias de configuración, por lo que está deshabilitado por defecto
tal vez ,build.gradle
configuración ahora esté obsoleta y solo necesite habilitarla en las actividades adecuadas (sin embargo, debe probarla).
Ahora, para habilitarlo, debe hacer:
public class MainActivity extends AppCompatActivity {
static {
AppCompatDelegate.setCompatVectorFromResourcesEnabled(true);
}
...
}
Respuesta original - Abril / 2016
Creo que esto está sucediendo porque Support Vector estaba deshabilitado en la última versión de la biblioteca: 23.3.0
Según este POST :
Para los usuarios de AppCompat, hemos decidido eliminar la funcionalidad que le permite usar elementos de diseño vectoriales de los recursos en dispositivos anteriores a Lollipop debido a problemas encontrados en la implementación en la versión 23.2.0 / 23.2.1 (NÚMERO 205236) . El uso de la aplicación: srcCompat y setImageResource () continúa funcionando.
Si visita el problema ISSUE 205236 , parece que se habilitarán en el futuro, pero el problema de la memoria no se solucionará pronto:
En la próxima versión, agregué una API opt-in donde puede volver a habilitar el soporte de VectorDrawable que se eliminó. Sin embargo, viene con las mismas advertencias que antes (uso de memoria y problemas con la actualización de la configuración).
Tuve un problema similar. Entonces, en mi caso, revirtí todos los íconos que usan dibujables vectoriales de recursos a imágenes PNG nuevamente (ya que el problema de memoria seguirá sucediendo incluso después de que brinden una opción para habilitarlo nuevamente).
No estoy seguro de si esta es la mejor opción, pero en mi opinión soluciona todos los fallos.