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

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>

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.


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


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.


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 .

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.