Android Studio ahora admite activos vectoriales en 21+ y generará pngs para versiones inferiores en tiempo de compilación. Tengo un activo vectorial (de los iconos de material) que quiero cambiar el color de relleno. Esto funciona en 21+, pero los png generados no cambian de color. ¿Hay alguna forma de hacer esto?
<vector android:height="48dp" android:viewportHeight="24.0"
android:viewportWidth="24.0" android:width="48dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="@color/primary" android:pathData="M9,16.17L4.83,12l-1.42,1.41L9,19 21,7l-1.41,-1.41z"/>
android:tint
debe ser despuésandroid:src
drawableLeft
adentroButton
?Puedes hacerlo.
PERO no puede usar referencias de color para colores (..lame), de lo contrario funcionará solo para L +
fuente
Como se dijo en otras respuestas, no edite el vector dibujable directamente, en su lugar, puede teñir el código java, así:
Y en aras de la simplicidad, he creado una clase auxiliar:
Para usar solo haga lo siguiente:
O:
fuente
Para cambiar el color de la imagen vectorial puede usar directamente android: tint = "@ color / colorAccent"
Para cambiar el color programáticamente
fuente
getColor(ResId, Theme)
no lo está. O puede usarloResourcesCompat.getColor(getResources(), R.color.primary, null);
si no le importa el tema ... o si su delegado de contexto / política ES una actividad, puede hacerlogetTheme()
para ese último parámetro.Actualmente la solución de trabajo es android: fillColor = "# FFFFFF"
Nada funcionó para mí excepto la codificación en el vector
Sin embargo, fillcolor y tint podrían funcionar pronto. Por favor vea esta discusión para más información:
https://code.google.com/p/android/issues/detail?id=186431
Además, los colores pueden permanecer en el caché, por lo que puede ser útil eliminar la aplicación para todos los usuarios.
fuente
Android Studio ahora admite vectores pre-lollipop. Sin conversión PNG. Todavía puede cambiar su color de relleno y funcionará.
En su ImageView, use
En tu archivo gradle,
fuente
Actualización:
AppCompat
soporteOtras respuestas que sospechan
android:tint
que solo funcionarán en más de 21 dispositivos, AppCompat ( v23.2.0 y superior ) ahora ofrece un manejo compatible con versiones anteriores del atributo tint.Entonces, el curso de acción sería usar
AppCompatImageView
yapp:srcCompat
(en el espacio de nombres de AppCompat) en lugar deandroid:src
(espacio de nombres de Android).Aquí hay un ejemplo (AndroidX: Esto es androidx.appcompat.widget.AppCompatImageView ;)):
Y no olvide habilitar el soporte de dibujo vectorial en gradle:
fuente
AppCompatImageView
está bajoandroidx.appcompat.widget.AppCompatImageView
Agregue esta biblioteca a Gradle para habilitar el vector de color dibujable en dispositivos Android antiguos.
y volver a sincronizar gradle. Creo que resolverá el problema.
fuente
Si los vectores no muestran colores configurados individualmente con fillColor, entonces pueden estar configurados en un parámetro de widget predeterminado.
Intente agregar
app:itemIconTint="@color/lime"
a activity_main.xml para establecer un tipo de color predeterminado para los iconos del widget.VectorDrawable @ developers.android
fuente
si buscas soportar la versión anterior pre lolipop
usa el mismo código xml con algunos cambios
en lugar de lo normal
ImageView --> AppCompatImageView
en vez de
android:src --> app:srcCompat
aquí hay un ejemplo
no te olvides de actualizar tu gradle como @ Sayooj Valsan menciona
Aviso Para cualquiera que use el vector, nunca le dé su referencia de vector a un color como este,
android:fillColor="@color/primary"
déle su valor hexadecimal.fuente
@color
parafillcolor
?Para aquellos que no usan un
ImageView
, lo siguiente funcionó para mí en un planoView
(y, por lo tanto, el comportamiento debería replicarse en cualquier tipo de vista)fuente