Tono Drawable del botón de Android

¿Es posible teñir el drawableLeft en un botón android? Tengo un dibujo negro que me gustaría teñir de blanco. Sé cómo lograr esto con una vista de imagen (imagen a la izquierda), pero quiero hacerlo con el botón predeterminado android.

Introduzca aquí la descripción de la imagen

Mi código fuente:

<Button android:layout_height="wrap_content" android:layout_width="0dp" android:layout_weight="1" android:text="@string/drawer_quizzes" android:backgroundTint="@color/md_light_green_500" android:stateListAnimator="@null" android:textColor="#fff" android:textSize="12dp" android:fontFamily="sans-serif" android:drawableLeft="@drawable/ic_action_landscape" android:gravity="left|center_vertical" android:drawablePadding="8dp" /> 

¿Hay alguna manera de teñir el botón? ¿O hay un método de vista personalizada para lograr este efecto?

Usted puede conseguir colorear el leftable drawable en un botón con este método:

Paso 1: Cree un archivo de recursos dibujable con mapa de bits como elemento padre como se muestra a continuación y ic_action_landscape.xml como ic_action_landscape.xml bajo la carpeta ic_action_landscape.xml

 <?xml version="1.0" encoding="utf-8"?> <bitmap xmlns:android="http://schemas.android.com/apk/res/android" android:src="@android:drawable/ic_btn_speak_now" android:tint="@color/white" /> 

Paso 2: Cree su control Button en su diseño como se muestra a continuación

 <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:backgroundTint="@color/md_light_green_500" android:drawableLeft="@drawable/ic_action_landscape" android:drawablePadding="8dp" android:fontFamily="sans-serif" android:gravity="left|center_vertical" android:stateListAnimator="@null" android:text="@string/drawer_quizzes" android:textColor="#fff" android:textSize="12dp" /> 

El botón obtiene el ic_action_landscape.xml la ic_action_landscape.xml de la carpeta dibujable en lugar de @android: png (s) dibujable o dibujable.

Método 2:
Paso 1:
Incluso puede agregar el icono como una barra de acción y los iconos de la pestaña con el primer plano como imagen que se pueden importar desde una ubicación personalizada o un Clipart

Paso 2:
En el menú desplegable Tema, seleccione Personalizar.

Paso 3:
A continuación, seleccione el color como #FFFFFF en la selección de color de primer plano. Método 2 Representación gráfica

Finalice el asistente para añadir la imagen y, a continuación, agregue el dibujable como una imagen.

Representación gráfica de la respuesta a la pregunta

Como sugirió @Boris, puede utilizar la biblioteca de soporte.

He extendido el AppCompatButton con algún código de proyecto . El TintAppCompatButton debe tener comportamiento predeterminado, pero TintAppCompatButtonCustom se realizó a color personalizado de demostración.

Voy a ver si puedo levantar un PR para conseguir que en la biblioteca oficial de apoyo.

El código de interés es:

 private void init() { PorterDuff.Mode tintMode = PorterDuff.Mode.SRC_IN; Drawable[] ds = getCompoundDrawables(); tint(ds[LEFT], Color.RED, tintMode); tint(ds[TOP], Color.YELLOW, tintMode); tint(ds[RIGHT], Color.GREEN, tintMode); tint(ds[BOTTOM], Color.BLUE, tintMode); } private void tint(Drawable d, int color, PorterDuff.Mode tintMode) { TintInfo ti = new TintInfo(); ti.mTintMode = tintMode; ti.mTintList = ColorStateList.valueOf(color); ti.mHasTintList = true; ti.mHasTintMode = true; TintManager.tintDrawable(d, ti, new int[]{0}); } 

Puedo llegar tarde a esto, pero si estás usando C #, puedes hacerlo de esta manera:

 Color iconColor = Color.Orange; // TODO: Get from settings Mode mode = Mode.SrcAtop; Drawable drawable = ResourcesCompat.GetDrawable(Resources, Resource.Drawable.ic_action_arrest, null); drawable.SetColorFilter(iconColor, mode); 

También necesitará:

 using Android.Graphics; using static Android.Graphics.PorterDuff; using Android.Graphics.Drawables; 

Espero que esto ayude. Es la forma más fácil que encontré. Tenga en cuenta, también, que cualquier lugar en su aplicación que está utilizando este icono, será este color.

Sé que hay muchas respuestas ya, pero ninguna de ellas me hizo feliz ya que no quería tener diferentes estilos para diferentes estilos de elementos.

Así que mi solución fue establecer el filtro de color en el constructor de esta manera:

 int textColor = getTextColors().getColorForState(EMPTY_STATE_SET, Color.WHITE); Drawable[] drawables = getCompoundDrawablesRelative(); for (Drawable drawable : drawables) { if(drawable != null) { drawable.setColorFilter(textColor, PorterDuff.Mode.SRC_ATOP); } } 

Utilicé el color del texto porque esto era lo que necesitaba, pero puede ser substituido por el atributo de encargo para ser más dinámico.

  • Android: Cómo configurar el color del texto de un Toast
  • Cómo obtener el ID de fondo actual de una vista
  • Android SDK - camera2 - Dibujar rectángulo sobre TextureView
  • Equivalente de ImageView scaleType 'centerCrop' a bitmap gravedad dibujable
  • Android: no se pudo convertir @ drawable / picture en un drawable
  • Android: Configuración de la ventana de fondo en la actividad iniciada
  • Uso de una barra de soporte para la distribución del teléfono y una barra de acción independiente para el diseño de la tableta
  • Cómo mantener el tamaño de la imagen de fondo cuando el teclado del software muestra
  • Configuración Dibujable como color de texto alza una excepción 'El valor de color debe comenzar con #'
  • ¿Cómo agrego el relleno a un mapa de bits y un color en una lista de capas
  • Spinner Dropdown Flecha
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.