¿Es posible hacer que el tintado dibujable funcione para api <21?
<bitmap
xmlns:android="http://schemas.android.com/apk/res/android"
android:src="@drawable/ic_calendar"
android:tint="@color/primary" />
Funciona bien, pero solo para dispositivos con API21. ¿Alguna solución para dispositivos api inferiores o compatibilidad con AppCompat? No puedo encontrar nada.
AppCompatImageView
docs:This will automatically be used when you use ImageView in your layouts. You should only need to manually use this class when writing custom views.
developer.android.com/reference/android/support/v7/widget/… Entonces, usar lo normalImageView
en el diseño debería funcionar bien.Puedes lograrlo usando el código fuente. Anteriormente, el teñido no era compatible con
DrawableCompat
. A partir de la biblioteca de soporte 22.1, puede hacerlo, pero debe hacerlo de esta manera:fuente
ContextCompat.getColor()
lugar degetResources().getColor()
.¿No podría simplemente usar un ImageView para mostrar su Drawable?
android:tint
funciona bien en niveles de API anteriores.<ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/ic_calendar" android:tint="@color/primary" />
fuente
<selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_activated="true" android:drawable="@drawable/ic_home_tinted" /> <item android:drawable="@drawable/ic_home" /> </selector>
Se ha hecho una pregunta similar antes aquí: https://stackoverflow.com/a/26533340/950427
Android Drawable Tinting solo es compatible con Android 5.0+ (API 21+). (Dice "
At the moment this is limited to coloring the action bar and some widgets.
").Y
Fuentes:
http://android-developers.blogspot.com/2014/10/appcompat-v21-material-design-for-pre.html
https://chris.banes.me/2014/10/17/appcompat-v21/
fuente
ImageView
ahora también es compatible aandroid:tint
través de AppCompat, como en la respuesta de @ Jonik.AppCompatImageView
noImageView
.Ahora AppCompatImageView, AppCompatButton reemplazará el botón ImageView para admitir el tinte en dispositivos con API más baja. Consulte el enlace para obtener más detalles AppCompatImageView , AppCompatButton
fuente
Para teñir imágenes puedes usar
imageView.setColorFilter(int color)
. Esto funciona desde API 8 y funcionó para teñir mi imagen de negro a un color que quería. Esto puede reemplazar,setImageTintList()
pero solo usarloandroid:tint
también debería funcionar.fuente
Utilice este
xmlns de NameSpace : app = "http://schemas.android.com/apk/res-auto"
y luego puedes reemplazar cada android: tint con app: tint. Esto me solucionó el problema.
fuente
Llego un poco tarde, pero he aquí cómo hacerlo.
val textInput = EditText(context) val drawable = ContextCompat.getDrawable(context, R.drawable.your_drawable) drawable?.let { myDrawable -> DrawableCompat.setTint(myDrawable, ContextCompat.getColor(context, R.color.your_color)) textInput.setCompoundDrawablesRelativeWithIntrinsicBounds(null, null, myDrawable, null) }
fuente
Esto hará lo que desee y debería funcionar en todas las versiones de Android de la biblioteca de soporte:
@JvmStatic fun getTintedDrawable(inputDrawable: Drawable, @ColorInt color: Int): Drawable { val wrapDrawable = DrawableCompat.wrap(inputDrawable.mutate()) DrawableCompat.setTint(wrapDrawable, color) DrawableCompat.setTintMode(wrapDrawable, Mode.SRC_IN) return wrapDrawable }
fuente
Si alguien quiere crear un nuevo dibujable (tin1, tint2 ..) intente esto
<?xml version="1.0" encoding="utf-8"?> <bitmap xmlns:android="http://schemas.android.com/apk/res/android" android:src="@drawable/your_image" android:tint="@color/tint_color"> </bitmap>
fuente