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.