Sự khác biệt giữa các thuộc tính background, backgroundTint, backgroundTintMode trong xml bố cục android là gì?


112

Trong khi làm việc với xml layout android, tôi đã xem qua backgroundTintthuộc tính. Tôi không hiểu là để làm gì.

Ngoài ra là gì backgroundTintMode??

Câu trả lời:


90

Tôi đã thử nghiệm các kết hợp khác nhau của android:background, android:backgroundTintandroid:backgroundTintMode.

android:backgroundTintáp dụng bộ lọc màu cho tài nguyên android:backgroundkhi được sử dụng cùng với android:backgroundTintMode.

Đây là kết quả:

Kiểm tra tông màu

Đây là mã nếu bạn muốn thử nghiệm thêm:

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

Trong ví dụ TextView thứ hai của bạn, tôi tự hỏi khi chỉ sử dụng android:backgroundTintmà không có android:background, TextView thứ hai này không thay đổi bất cứ điều gì. Tuy nhiên, tôi thử android:backgroundTinttrong Button, màu của nút trông giống với màu của backgroundTint mà tôi đã đặt. Bạn có thể giải thích những trường hợp này?
Vinh Nguyen

@VinhNguyen, thuộc android:backgroundtính phải được đặt android:backgroundTintđể hiển thị trên TextView. Trong trường hợp của Button, tôi đoán rằng nó đã có một số loại nền / màu được thiết lập bởi khuôn khổ.
Yogesh Umesh Vaity

13

Các backgroundTintthuộc tính này sẽ giúp bạn thêm một màu (bóng râm) để nền. Bạn có thể cung cấp một giá trị màu cho cùng một giá trị dưới dạng -"#rgb", "#argb", "#rrggbb", or "#aarrggbb".

Mặt backgroundTintModekhác sẽ giúp bạn áp dụng màu nền. Nó phải có các giá trị không đổi như src_over, src_in, src_atop,v.v.

Tham khảo phần này để biết rõ về các giá trị hằng số có thể được sử dụng. Tìm kiếm backgroundTintthuộc tính và mô tả cùng với các thuộc tính khác nhau sẽ có sẵn.


liên kết bị hỏng.
mallaudin

1
Không, không phải. Bạn có thể kiểm tra lại?
Samridhi

7

Tôi sẽ không nhấn mạnh nhiều về sự khác biệt vì nó đã được đề cập, nhưng hãy lưu ý những điều dưới đây:

  • android:backgroundTint android:backgroundTintMode chỉ có ở API 21
  • Nếu bạn có một tiện ích con có nền có thể vẽ png / vector được đặt bởi android:backgroundvà bạn muốn thay đổi màu mặc định của nó, thì bạn có thể sử dụng android:backgroundTintđể thêm bóng râm cho nó.

thí dụ

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

nhập mô tả hình ảnh ở đây

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

nhập mô tả hình ảnh ở đây

Một vi dụ khac

Nếu bạn cố gắng để thay đổi màu sắc giọng của FloatingActionButtonsử dụng android:backgroundbạn sẽ không nhận thấy một sự thay đổi, đó là bởi vì nó đã được sử dụng app:srcCompat, vì vậy để làm được điều mà bạn có thể sử dụng android:backgroundTintthay vì


4

BackgroundTint hoạt động như một bộ lọc màu.

FEFBDE dưới dạng màu

37AEE4 làm nền

Hãy thử xem sự khác biệt bằng màu nhận xét / nền và kiểm tra kết quả đầu ra khi cả hai được thiết lập.


4

android: backgroundTintMode

Chế độ hòa trộn được sử dụng để áp dụng màu nền.

android: backgroundTint

Tô màu để áp dụng cho nền. Phải là một giá trị màu, theo hình thức #rgb, #argb, #rrggbb, hoặc #aarrggbb.

Đây cũng có thể là tham chiếu đến tài nguyên (ở dạng "@ [package:] type: name") hoặc thuộc tính chủ đề (ở dạng "? [Package:] [type:] name") chứa giá trị thuộc loại này .

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.