我知道有很多主题在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作为另一个问题的建议。
提前致谢
答案 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
中的内容完全不同