Saltar al contenido

Android TextView DrawableTint en dispositivos anteriores a v23

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.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *