Was ist der Unterschied zwischen den Attributen background, backgroundTint, backgroundTintMode in Android Layout XML?

112

Während der Arbeit mit dem Android Layout XML stieß ich auf backgroundTintAttribut. Ich verstehe nicht, wofür.

Auch was ist backgroundTintMode??

Sarasranglt
quelle

Antworten:

90

Getestet habe ich verschiedene Kombinationen von android:background, android:backgroundTintund android:backgroundTintMode.

android:backgroundTintWendet den Farbfilter auf die Ressource an, android:backgroundwenn er zusammen mit verwendet wird android:backgroundTintMode.

Hier sind die Ergebnisse:

Farbtonprüfung

Hier ist der Code, wenn Sie weiter experimentieren möchten:

<?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
quelle
In Ihrem zweiten TextView-Beispiel frage ich mich , ob diese zweite TextView nichts ändert , wenn Sie nur android:backgroundTintohne verwenden android:background. Ich versuche jedoch android:backgroundTintin Button, dass die Farbe der Button der Farbe von backgroundTint entspricht, die ich eingestellt habe. Können Sie diese Fälle erklären?
Vinh Nguyen
@VinhNguyen, android:backgroundEigenschaft muss festgelegt werden, damit die android:backgroundTintsichtbar wird TextView. Im Falle von Button, vermute ich, dass es bereits eine Art Hintergrund / Farbe hat, die vom Framework festgelegt wird.
Yogesh Umesh Vaity
13

Das backgroundTintAttribut hilft Ihnen, dem Hintergrund einen Farbton hinzuzufügen. Sie können dafür einen Farbwert in Form von - angeben"#rgb", "#argb", "#rrggbb", or "#aarrggbb".

Das backgroundTintModehilft Ihnen andererseits, die Hintergrundtönung anzuwenden. Es muss konstante Werte wie src_over, src_in, src_atop,etc. haben.

Lesen Sie dies , um eine klare Vorstellung von den konstanten Werten zu erhalten, die verwendet werden können. Die Suche nach dem backgroundTintAttribut und der Beschreibung sowie verschiedene Attribute werden verfügbar sein.

Samridhi
quelle
Link ist defekt.
Mallaudin
1
Nein, ist es nicht. Können Sie noch einmal überprüfen?
Samridhi
7

Ich werde nicht viel auf den Unterschied eingehen, da er bereits behandelt wird, aber beachte Folgendes:

  • android:backgroundTint android:backgroundTintMode sind nur bei API 21 verfügbar
  • Wenn Sie ein Widget haben, für das ein von PNG / Vektor zeichnbarer Hintergrund festgelegt wurde android:background, und die Standardfarbe ändern möchten, können android:backgroundTintSie ihm einen Farbton hinzufügen.

Beispiel

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

Geben Sie hier die Bildbeschreibung ein

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

Geben Sie hier die Bildbeschreibung ein

Ein anderes Beispiel

Wenn Sie versuchen, die Akzentfarbe der FloatingActionButtonVerwendung zu android:backgroundändern, werden Sie keine Änderung bemerken, da dies bereits verwendet app:srcCompatwird. Um dies zu tun, können Sie android:backgroundTintstattdessen verwenden

Zain
quelle
4

BackgroundTint fungiert als Farbfilter.

FEFBDE als Farbton

37AEE4 als Hintergrund

Versuchen Sie, den Unterschied anhand der Kommentartönung / des Hintergrunds zu erkennen, und überprüfen Sie die Ausgabe, wenn beide festgelegt sind.

ZAN
quelle
4

android: backgroundTintMode

Mischmodus zum Anwenden der Hintergrundfarbe.

android: backgroundTint

Farbton für den Hintergrund. Muss ein Farbwert sein, der in der Form #rgb, #argb, #rrggbb, oder#aarrggbb .

Dies kann auch ein Verweis auf eine Ressource (in der Form "@ [Paket:] Typ: Name") oder ein Themenattribut (in der Form "? [Paket:] [Typ:] Name") sein, die einen Wert dieses Typs enthält .

IntelliJ Amiya
quelle