อะไรคือความแตกต่างระหว่างคุณสมบัติ background, backgroundTint, backgroundTintMode ใน xml เลย์เอาต์ของ Android


112

ในขณะที่ทำงานกับ xml รูปแบบ android ฉันเจอbackgroundTintแอตทริบิวต์ ฉันไม่เข้าใจว่ามีไว้เพื่ออะไร

ยังคืออะไรbackgroundTintMode??

คำตอบ:


90

ผมทดสอบชุดต่างๆของandroid:background, และandroid:backgroundTintandroid:backgroundTintMode

android:backgroundTintใช้ตัวกรองสีกับทรัพยากรของเมื่อใช้ร่วมกับandroid:backgroundandroid:backgroundTintMode

นี่คือผลลัพธ์:

ตรวจสอบสี

นี่คือรหัสหากคุณต้องการทดลองเพิ่มเติม:

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

ในตัวอย่าง TextView ที่สองของคุณฉันสงสัยว่าเมื่อใช้เพียงอย่างเดียวandroid:backgroundTintโดยไม่ใช้android:backgroundTextView ที่สองนี้จะไม่เปลี่ยนแปลงอะไรเลย อย่างไรก็ตามฉันลองใช้android:backgroundTintปุ่มสีของปุ่มดูเหมือนสีพื้นหลังสีเดียวกับที่ฉันตั้งไว้ คุณช่วยอธิบายกรณีเหล่านี้ได้ไหม
Vinh Nguyen

@VinhNguyen, android:backgroundสถานที่ให้บริการจะต้องมีการตั้งค่าสำหรับการมองเห็นได้บนandroid:backgroundTint TextViewในกรณีนี้Buttonฉันคาดเดาว่ามันมีพื้นหลัง / สีที่กำหนดโดยกรอบงานแล้ว
Yogesh Umesh Vaity

13

backgroundTintแอตทริบิวต์จะช่วยให้คุณสามารถเพิ่มโทนสี (ร่ม) ไปที่พื้นหลัง คุณสามารถระบุค่าสีสำหรับสิ่งเดียวกันในรูปแบบ -"#rgb", "#argb", "#rrggbb", or "#aarrggbb".

backgroundTintModeบนมืออื่น ๆ ที่จะช่วยให้คุณใช้สีพื้นหลัง มันต้องมีค่าคงที่เช่นsrc_over, src_in, src_atop,ฯลฯ

อ้างถึงสิ่งนี้เพื่อรับแนวคิดที่ชัดเจนเกี่ยวกับค่าคงที่ที่สามารถใช้ได้ ค้นหาbackgroundTintแอตทริบิวต์และคำอธิบายพร้อมกับแอตทริบิวต์ต่างๆ


ลิงก์เสีย
mallaudin

1
ไม่มันไม่ใช่. ตรวจใหม่ได้ไหม
สมฤดี

7

ฉันจะไม่เครียดกับความแตกต่างมากนักเพราะมันครอบคลุมไปแล้ว แต่สังเกตด้านล่าง:

  • android:backgroundTint android:backgroundTintMode มีให้ที่ API 21 เท่านั้น
  • หากคุณมีวิดเจ็ตที่มีพื้นหลังที่วาดได้ png / เวกเตอร์ที่กำหนดโดยandroid:backgroundและคุณต้องการเปลี่ยนสีเริ่มต้นคุณสามารถใช้android:backgroundTintเพื่อเพิ่มเฉดสีให้กับมันได้

ตัวอย่าง

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

ใส่คำอธิบายภาพที่นี่

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

ใส่คำอธิบายภาพที่นี่

ตัวอย่างอื่น

หากคุณพยายามเปลี่ยนสีเน้นเสียงของการFloatingActionButtonใช้งานandroid:backgroundคุณจะไม่สังเกตเห็นการเปลี่ยนแปลงนั่นเป็นเพราะมันถูกใช้ไปแล้วapp:srcCompatดังนั้นคุณสามารถใช้android:backgroundTintแทนได้


4

BackgroundTint ทำงานเป็นตัวกรองสี

FEFBDE เป็นสี

37AEE4 เป็นพื้นหลัง

ลองดูความแตกต่างโดยใช้สีความคิดเห็น / พื้นหลังและตรวจสอบผลลัพธ์เมื่อตั้งค่าทั้งสองอย่างแล้ว


4

Android: backgroundTintMode

โหมดการผสมใช้เพื่อปรับสีพื้นหลัง

android: backgroundTint

ย้อมสีเพื่อใช้กับพื้นหลัง จะต้องเป็นค่าสีในรูปแบบของ#rgb, #argb, หรือ#rrggbb#aarrggbb

นอกจากนี้ยังอาจเป็นการอ้างอิงถึงทรัพยากร (ในรูปแบบ "@ [package:] type: name") หรือแอตทริบิวต์ธีม (ในรูปแบบ "? [package:] [type:] name") ที่มีค่าประเภทนี้ .

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.