No busques más por otros sitios porque has llegado al espacio indicado, tenemos la solución que necesitas encontrar sin problema.
Solución:
La biblioteca appcompat de AndroidX admite tintado en TextView desde la versión 1.1.0-alpha03 [ref].
Agregar dependencias a la biblioteca appcompat
dependencies
implementation "androidx.appcompat:appcompat:1.1.0"
Luego, dibujable en TextView se puede teñir de XML como este
No olvides incluir
xmlns:app="http://schemas.android.com/apk/res-auto"
y extender su Actividad desde AppCompatActivity
.
La forma programática de hacer esto es
Drawable[] drawables = textView.getCompoundDrawables();
if (drawables[0] != null) // left drawable
drawables[0].setColorFilter(color, Mode.MULTIPLY);
Esto funciona para todos los niveles de API.
Esta es su mejor opción para dispositivos anteriores a Marshmallow.
Esta respuesta se basa en la sugerencia de @kris larson.
Utilizo los siguientes métodos y funciona bien en todos los dispositivos.
setTintedCompoundDrawable
un método personalizado que toma la TextView
al que le gustaría establecer el compuesto dibujable, una identificación res dibujable y la identificación res de su elección de color.
private void setTintedCompoundDrawable(TextView textView, int drawableRes, int tintRes)
textView.setCompoundDrawablesWithIntrinsicBounds(
null, // Left
Utils.tintDrawable(ContextCompat.getDrawable(getContext(), drawableRes),
ContextCompat.getColor(getContext(), tintRes)), // Top
null, // Right
null); //Bottom
// if you need any space between the icon and text.
textView.setCompoundDrawablePadding(12);
Tinte tintDrawable
el método es así:
public static Drawable tintDrawable(Drawable drawable, int tint)
drawable = DrawableCompat.wrap(drawable);
DrawableCompat.setTint(drawable, tint);
DrawableCompat.setTintMode(drawable, PorterDuff.Mode.SRC_ATOP);
return drawable;
Eres capaz de confirmar nuestro quehacer fijando un comentario y dejando una valoración te damos las gracias.