Qual è la differenza tra gli attributi background, backgroundTint, backgroundTintMode nel layout xml di Android?


112

Mentre lavoravo con l'xml del layout Android, mi sono imbattuto backgroundTintnell'attributo. Non capisco a cosa serva.

Inoltre cosa è backgroundTintMode??

Risposte:


90

Ho provato varie combinazioni di android:background, android:backgroundTinte android:backgroundTintMode.

android:backgroundTintapplica il filtro colore alla risorsa di android:backgroundquando viene utilizzato insieme a android:backgroundTintMode.

Ecco i risultati:

Controllo della tinta

Ecco il codice se vuoi sperimentare ulteriormente:

<?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>

Nel tuo secondo esempio TextView, mi chiedo se usi solo android:backgroundTintsenza android:background, questo secondo TextView non cambia nulla. Tuttavia, provo android:backgroundTintin Button, il colore del pulsante sembra lo stesso colore di backgroundTint che ho impostato. Potresti spiegare questi casi?
— Vinh Nguyen

@VinhNguyen, la android:backgroundproprietà deve essere impostata android:backgroundTintaffinché sia ​​visibile TextView. In caso di Button, immagino che abbia già una sorta di sfondo / colore impostato dal framework.
— Yogesh Umesh Vaity

13

L' backgroundTintattributo ti aiuterà ad aggiungere una tinta (ombra) allo sfondo. Puoi fornire un valore di colore per lo stesso sotto forma di:"#rgb", "#argb", "#rrggbb", or "#aarrggbb".

L' backgroundTintModealtra parte vi aiuterà ad applicare la tinta di fondo. Deve avere valori costanti come src_over, src_in, src_atop,ecc.

Fare riferimento a questo per avere un'idea chiara dei valori costanti che possono essere utilizzati. Cerca l' backgroundTintattributo e la descrizione insieme a vari attributi saranno disponibili.


il collegamento è interrotto.
— mallaudin

1
No non lo è. Puoi controllare di nuovo?
— Samridhi

7

Non sottolineerò molto la differenza in quanto è già coperta, ma nota quanto segue:

  • android:backgroundTint android:backgroundTintMode sono disponibili solo in API 21
  • Se hai un widget che ha uno sfondo disegnabile png / vettoriale impostato da android:backgrounde vuoi cambiare il suo colore predefinito, puoi usarlo android:backgroundTintper aggiungere un'ombra ad esso.

esempio

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

inserisci qui la descrizione dell'immagine

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

inserisci qui la descrizione dell'immagine

Un altro esempio

Se provi a cambiare il colore dell'accento FloatingActionButtondell'uso android:backgroundnon noterai un cambiamento, perché è già utilizzato app:srcCompat, quindi per farlo puoi usare android:backgroundTintinvece


4

BackgroundTint funziona come filtro colore.

FEFBDE come tinta

37AEE4 come sfondo

Prova a vedere la differenza in base alla tinta / sfondo del commento e controlla l'output quando entrambi sono impostati.


4

Android: backgroundTintMode

Metodo di fusione utilizzato per applicare la tinta di sfondo.

Android: backgroundTint

Tinta da applicare sullo sfondo. Deve essere un valore di colore, nella forma di #rgb, #argb, #rrggbb, o #aarrggbb.

Può anche essere un riferimento a una risorsa (nella forma "@ [pacchetto:] tipo: nome") o a un attributo del tema (nella forma "? [Pacchetto:] [tipo:] nome") contenente un valore di questo tipo .

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.