¿Cuál es la diferencia entre los atributos background, backgroundTint, backgroundTintMode en el diseño xml de Android?

112

Mientras trabajaba con el diseño xml de Android, encontré el backgroundTintatributo. No entiendo para qué sirve.

¿También qué es backgroundTintMode?

Sarasranglt
fuente

Respuestas:

90

Probé varias combinaciones de android:background, android:backgroundTinty android:backgroundTintMode.

android:backgroundTintaplica el filtro de color al recurso de android:backgroundcuando se usa junto con android:backgroundTintMode.

Aquí están los resultados:

Verificación de tinte

Aquí está el código si desea experimentar más:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:orientation="vertical"
    android:layout_height="match_parent"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    app:layout_behavior="@string/appbar_scrolling_view_behavior"
    tools:showIn="@layout/activity_main">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginBottom="32dp"
        android:textSize="45sp"
        android:background="#37AEE4"
        android:text="Background" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginBottom="32dp"
        android:textSize="45sp"
        android:backgroundTint="#FEFBDE"
        android:text="Background tint" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginBottom="32dp"
        android:textSize="45sp"
        android:background="#37AEE4"
        android:backgroundTint="#FEFBDE"
        android:text="Both together" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginBottom="32dp"
        android:textSize="45sp"
        android:background="#37AEE4"
        android:backgroundTint="#FEFBDE"
        android:backgroundTintMode="multiply"
        android:text="With tint mode" />
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginBottom="32dp"
        android:textSize="45sp"
        android:text="Without any" />
</LinearLayout>
Yogesh Umesh Vaity
fuente
En su segundo ejemplo de TextView, me pregunto cuando se usa solo android:backgroundTintsin android:background, este segundo TextView no cambia nada. Sin embargo, lo intento android:backgroundTinten Button, el color del botón parece el mismo color de backgroundTint que configuré. ¿Podrías explicar estos casos?
Vinh Nguyen
@VinhNguyen, la android:backgroundpropiedad debe estar configurada para android:backgroundTintque sea visible en TextView. En el caso del Button, supongo que ya tiene algún tipo de fondo / color establecido por el marco.
Yogesh Umesh Vaity
13

El backgroundTintatributo le ayudará a agregar un tinte (sombra) al fondo. Puede proporcionar un valor de color para el mismo en forma de:"#rgb", "#argb", "#rrggbb", or "#aarrggbb".

Por backgroundTintModeotro lado, te ayudará a aplicar el tinte de fondo. Debe tener valores constantes como src_over, src_in, src_atop,etc.

Consulte esto para tener una idea clara de los valores constantes que se pueden utilizar. La búsqueda del backgroundTintatributo y la descripción junto con varios atributos estarán disponibles.

Samridhi
fuente
el enlace está roto.
mallaudin
1
No, no es. ¿Puedes comprobar de nuevo?
Samridhi
7

No insistiré mucho en la diferencia, ya que ya está cubierta, pero observe lo siguiente:

  • android:backgroundTint android:backgroundTintMode solo están disponibles en API 21
  • Si tiene un widget que tiene un fondo dibujable png / vector establecido por android:backgroundy desea cambiar su color predeterminado, puede usarlo android:backgroundTintpara agregarle un tono.

ejemplo

<Button
    android:layout_width="50dp"
    android:layout_height="wrap_content"
    android:background="@android:drawable/ic_dialog_email" />

ingrese la descripción de la imagen aquí

<Button
    android:layout_width="50dp"
    android:layout_height="wrap_content"
    android:background="@android:drawable/ic_dialog_email"
    android:backgroundTint="@color/colorAccent" />

ingrese la descripción de la imagen aquí

Otro ejemplo

Si intenta cambiar el color de acento del FloatingActionButtonuso android:background, no notará ningún cambio, es porque ya se está utilizando app:srcCompat, por lo que para hacerlo puede usar android:backgroundTinten su lugar

Zain
fuente
4

BackgroundTint funciona como filtro de color.

FEFBDE como tinte

37AEE4 como fondo

Intente ver la diferencia por tinte de comentario / fondo y verifique la salida cuando ambos estén configurados.

ZAN
fuente
4

android: backgroundTintMode

Modo de fusión utilizado para aplicar el tinte de fondo.

android: backgroundTint

Tinte para aplicar al fondo. Debe ser un valor de color, en forma de #rgb, #argb, #rrggbb, o #aarrggbb.

Esto también puede ser una referencia a un recurso (en la forma "@ [paquete:] tipo: nombre") o atributo de tema (en la forma "? [Paquete:] [tipo:] nombre") que contiene un valor de este tipo .

IntelliJ Amiya
fuente