Apa perbedaan antara atribut background, backgroundTint, backgroundTintMode di android layout xml?

112

Saat bekerja dengan layout android xml saya menemukan backgroundTintatribut. Saya tidak mengerti untuk apa.

Juga apa backgroundTintMode??

Sarasranglt
sumber

Jawaban:

90

Saya menguji berbagai kombinasi android:background, android:backgroundTintdan android:backgroundTintMode.

android:backgroundTintmenerapkan filter warna ke sumber daya android:backgroundsaat digunakan bersama dengan android:backgroundTintMode.

Berikut hasilnya:

Tint Check

Berikut kodenya jika Anda ingin bereksperimen lebih lanjut:

<?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
sumber
Dalam contoh TextView kedua Anda, saya bertanya-tanya jika hanya menggunakan android:backgroundTinttanpa android:background, TextView kedua ini tidak mengubah apa pun. Namun, saya coba android:backgroundTintdi Button, warna tombol terlihat sama dengan warna backgroundTint yang saya set. Bisakah Anda menjelaskan kasus ini?
Vinh Nguyen
@VinhNguyen, android:backgroundproperti harus disetel android:backgroundTintagar terlihat di TextView. Dalam kasus ini Button, saya menduga itu sudah memiliki semacam latar belakang / warna yang ditetapkan oleh kerangka kerja.
Yogesh Umesh Vaity
13

The backgroundTintatribut akan membantu Anda untuk menambahkan warna (warna) ke latar belakang. Anda dapat memberikan nilai warna yang sama dalam bentuk -"#rgb", "#argb", "#rrggbb", or "#aarrggbb".

Di backgroundTintModesisi lain akan membantu Anda menerapkan warna latar belakang. Itu harus memiliki nilai konstan seperti src_over, src_in, src_atop,dll.

Lihat ini untuk mendapatkan gambaran yang jelas tentang nilai konstanta yang dapat digunakan. Cari backgroundTintatribut dan deskripsi bersama dengan berbagai atribut akan tersedia.

Samridhi
sumber
link rusak.
mallaudin
1
Tidak, tidak. Bisakah Anda memeriksanya lagi?
Samridhi
7

Saya tidak akan terlalu menekankan perbedaannya karena sudah dibahas, tetapi perhatikan hal di bawah ini:

  • android:backgroundTint android:backgroundTintMode hanya tersedia di API 21
  • Jika Anda memiliki widget dengan latar belakang png / vector drawable yang disetel android:background, dan Anda ingin mengubah warna defaultnya, Anda dapat menggunakan android:backgroundTintuntuk menambahkan bayangan padanya.

contoh

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

masukkan deskripsi gambar di sini

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

masukkan deskripsi gambar di sini

Contoh lain

Jika Anda mencoba mengubah warna aksen FloatingActionButtonpenggunaan android:backgroundAnda tidak akan melihat perubahan, itu karena sudah digunakan app:srcCompat, jadi untuk melakukan itu Anda dapat menggunakan android:backgroundTintsebagai gantinya

Zain
sumber
4

BackgroundTint berfungsi sebagai filter warna.

FEFBDE sebagai tint

37AEE4 sebagai latar belakang

Coba lihat perbedaannya dengan comment tint / background dan periksa outputnya jika keduanya sudah diatur.

ZAN
sumber
4

android: backgroundTintMode

Blending mode digunakan untuk menerapkan warna latar belakang.

android: backgroundTint

Pewarnaan untuk diterapkan ke latar belakang. Harus menjadi nilai warna, dalam bentuk #rgb, #argb, #rrggbb, atau #aarrggbb.

Ini juga bisa menjadi referensi ke sumber daya (dalam bentuk "@ [package:] type: name") atau atribut tema (dalam bentuk "? [Package:] [type:] name") yang berisi nilai jenis ini .

IntelliJ Amiya
sumber