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.
- Brillante degradado con dibujable androide xml
- Añadir sombra en el lado derecho e inferior del diseño
- La cancelación personalizada de la tostada no funciona
- XML vs setImageDrawable / setImageBitmap
- Cómo hacer que el mensaje de tostadas personalizado tome toda la pantalla
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?
- Aplicación para Android: Imagen de fondo sobre el color de fondo
- Spinner muestra como diálogo
- Android: Notificación personalizada de brindis hereda toast predeterminado
- Mostrando una Snackbar desde dentro de un Servicio
- cámara de encargo del androide estirada surfaceview
- Combinar StateListDrawable y LevelListDrawable
- Cambiar la posición de la lista desplegable del hilandero
- ¿Cómo crear una página desplazable de carruseles en Android?
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.
Finalice el asistente para añadir la imagen y, a continuación, agregue el dibujable como una imagen.
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.
- Los archivos múltiples dex definen Lcom / google / android / gms / internal / zzau
- Utilizar cámara USB en la aplicación de Android