在 android 布局 xml 中,backoundTint、 backoundTintMode 属性之间的区别是什么?

在使用 android 布局 xml 时,我遇到了 backgroundTint属性,我不知道它是用来做什么的。

还有什么是 backgroundTintMode? ?

163532 次浏览

backgroundTint属性将帮助您为背景添加色调(阴影)。您可以以 -"#rgb", "#argb", "#rrggbb", or "#aarrggbb".的形式提供相同颜色的值

另一方面,backgroundTintMode将帮助您应用背景色调。它必须具有像 src_over, src_in, src_atop,这样的常量值。

参考 这个以获得可以使用的常数值的清晰概念。可以搜索 backgroundTint属性和描述以及各种属性。

背景色作为颜色过滤器。

FEFBDE 作为色彩

37AEE4作为背景

尝试通过注释 tint/behind 查看差异,并在两者都设置时检查输出。

返回文章页面返回文章页面返回文章页面 android:

用于应用背景色彩的混合模式。

背景色调

要应用于背景的色彩。必须是颜色值,以 #rgb#argb#rrggbb#aarrggbb的形式。

这也可能是对资源的引用(在表单中) “@[ package: ] type: name”)或主题属性(表单中的 “ ? [ package: ][ type: ] name”)包含此类型的值。

我测试了各种 android:backgroundandroid:backgroundTintandroid:backgroundTintMode的组合。

当与 android:backgroundTintMode一起使用时,android:backgroundTint将颜色过滤器应用于 android:background的资源。

结果如下:

Tint Check

如果你想做进一步的实验,下面是代码:

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

我不会过多强调差异,因为它已经涵盖,但请注意以下内容:

  • android:backgroundTint android:backgroundTintMode仅在 API 21上有售
  • 如果有一个小部件,它的 png/Vector 背景由 android:background设置,并且希望更改其默认颜色,那么可以使用 android:backgroundTint为其添加阴影。

例子

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

enter image description here

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

enter image description here

另一个例子

如果你试图用 android:background改变 FloatingActionButton的重音颜色,你不会注意到变化,那是因为它已经使用了 app:srcCompat,所以为了做到这一点,你可以使用 android:backgroundTint代替