android:tint on background drawable of sdk< 21

时间:2017-07-31 16:13:41

标签: android android-layout android-drawable

我知道有很多主题在sdk 21之前讨论着色功能,但是 他们要么使用某种形象视图(我不这样做)或以编程方式解决它(我不想这样做)。

我的情况:

我有一个约束布局,其中9-patch drawable作为背景:

<android.support.constraint.ConstraintLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@drawable/testDrawable">

这是我的绘画:

<nine-patch xmlns:android="http://schemas.android.com/apk/res/android"
android:src="@drawable/ninepatchdrawable"
android:tint="@color/lightBlue"
android:tintMode="multiply" />

这适用于更新的设备,但正如我所说,色调不适用于设备sdk&lt; 21.我也没有收到任何错误信息。

我已经尝试将布局更改为:

<android.support.constraint.ConstraintLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@drawable/testDrawable"
        android:backgroundTint="@color/lightBlue"
        android:backgroundTintMode="multiply">

或使用app:backgroundTint作为另一个问题的建议。

提前致谢

2 个答案:

答案 0 :(得分:2)

您可以尝试这样的事情:

ImageView.getDrawable().setColorFilter(new PorterDuffColorFilter(context.getResources().getColor(**color**), PorterDuff.Mode.SRC_IN));

不要相信它可以使用较低的API - &gt;但它是一种改变色彩的好方法

答案 1 :(得分:2)

有一个明显的原因。

如果您查看docs。第一行的第一部分是:

  

使用Android 5.0(API级别21)及更高版本,

因为在API 21中添加了android:tint和材料设计。并且因为它是在API 21中添加的,所以它是一个在API 20及更低版本上没有意义的标记。

使用支持库(appcompat库)应该允许您使用它。您需要添加另一个命名空间,但这不是最重要的工作。您也可以在styles.xml

中执行此操作

backgroundTint与this question

中的内容完全不同