Quelle est la différence entre les attributs background, backgroundTint, backgroundTintMode dans Android layout xml?

112

En travaillant avec la mise en page Android xml, je suis tombé sur l' backgroundTintattribut. Je ne comprends pas à quoi ça sert.

Aussi qu'est-ce que c'est backgroundTintMode??

Sarasranglt
la source

Réponses:

90

J'ai testé différentes combinaisons de android:background, android:backgroundTintet android:backgroundTintMode.

android:backgroundTintapplique le filtre de couleur à la ressource de android:backgroundlorsqu'il est utilisé avecandroid:backgroundTintMode .

Voici les résultats:

Vérification de la teinte

Voici le code si vous souhaitez expérimenter davantage:

<?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
la source
Dans votre deuxième exemple TextView, je me demande lorsque vous utilisez uniquement android:backgroundTintsans android:background, ce deuxième TextView ne change rien. Cependant, j'essaie android:backgroundTintdans Button, la couleur du bouton ressemble à la même couleur de backgroundTint que j'ai définie. Pouvez-vous expliquer ces cas?
Vinh Nguyen
@VinhNguyen, la android:backgroundpropriété doit être définie pour que le android:backgroundTintsoit visible sur TextView. Dans le cas du Button, je suppose qu'il a déjà une sorte d'arrière-plan / couleur définie par le cadre.
Yogesh Umesh Vaity
13

L' backgroundTintattribut vous aidera à ajouter une teinte (nuance) à l'arrière-plan. Vous pouvez fournir une valeur de couleur pour le même sous la forme de -"#rgb", "#argb", "#rrggbb", or "#aarrggbb".

Le backgroundTintMode, d'autre part, vous aidera à appliquer la teinte de fond. Il doit avoir des valeurs constantes comme src_over, src_in, src_atop,etc.

Reportez - vous à ceci pour avoir une idée claire des valeurs constantes qui peuvent être utilisées. La recherche de l' backgroundTintattribut et la description ainsi que divers attributs seront disponibles.

Samridhi
la source
le lien est rompu.
mallaudin
1
Non ce n'est pas. Pouvez-vous vérifier à nouveau?
Samridhi
7

Je n'insisterai pas beaucoup sur la différence car elle est déjà couverte, mais notez ce qui suit:

  • android:backgroundTint android:backgroundTintMode sont uniquement disponibles à l'API 21
  • Si vous avez un widget avec un arrière-plan dessinable png / vecteur défini par android:backgroundet que vous souhaitez changer sa couleur par défaut, vous pouvez l'utiliser android:backgroundTintpour lui ajouter une nuance.

exemple

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

entrez la description de l'image ici

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

entrez la description de l'image ici

Un autre exemple

Si vous essayez de changer la couleur d'accentuation de l' FloatingActionButtonutilisation, android:backgroundvous ne remarquerez pas de changement, c'est parce qu'il est déjà utilisé app:srcCompat, donc pour ce faire, vous pouvez utiliser à la android:backgroundTintplace

Zain
la source
4

BackgroundTint fonctionne comme un filtre de couleur.

FEFBDE comme teinte

37AEE4 en arrière-plan

Essayez de voir la différence par la teinte / l'arrière-plan du commentaire et vérifiez la sortie lorsque les deux sont définis.

ZAN
la source
4

android: backgroundTintMode

Mode de fusion utilisé pour appliquer la teinte d'arrière-plan.

android: backgroundTint

Teinte à appliquer à l'arrière-plan. Doit être une valeur de couleur, sous la forme de #rgb, #argb, #rrggbbou#aarrggbb .

Cela peut aussi être une référence à une ressource (sous la forme "@ [package:] type: nom") ou à un attribut de thème (sous la forme "? [Package:] [type:] nom") contenant une valeur de ce type .

IntelliJ Amiya
la source