2017-07-31 51 views
0

我知道有很多话题讨论之前色调功能SDK 21布局的背景绘制,但 他们要么使用某种imageviews的(我不)或以编程方式解决这个问题(这我不想)。机器人:色彩上SDK <21

我的情况:

我有一个9补丁绘制作为背景的约束布局:

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

或使用应用程序:backgroundTint作为另一个问题suggestet。

在此先感谢

+0

看到使用'DrawableCompat#setTint(可绘制绘制,诠释色彩)' – pskink

回答

1

你可以尝试这样的事情:

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

不要相信它会以较低的API工作 - >但其在运行中改变色调的好方法

2

有一个明显的原因。

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

With Android 5.0 (API level 21) and above,

由于android:tint用在API 21的材料设计加入,因为它是在API 21中添加,它是具有上API 20和下没有意义的标记。

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

而且backgroundTint是完全不同的东西,你可以在this question

+0

Jeah,我已经知道了它的介绍在21级的api中,这就是为什么我知道我的问题低于这个水平。 我还没有发现如何使用支持库直接在xml中设置色调,你能给我一个提示吗? – Programmer879

+0

首先,你需要这个Gradle依赖:'compile'c​​om.android.support:appcompat-v7:25.3.1''。如果您没有定位API 25,则需要其他版本。其次,我建议你使用这个部分的styles.xml,你创建一个新的样式并添加你想要的。然后添加这一行:'#FFF'您可以用@color资源或所需颜色替换#FFF。在'tint'前添加'android:'意味着你使用ANdroid资源,而不是appcompat资源 – Zoe

+0

我做了所有的事情,就像你说的,我得到了'错误:(1714,21)找不到与给定名称相匹配的资源:attr “tint''。 我的目标API是24,我使用以下支持库版本: 'compile'c​​om.android.support:appcompat-v7:24.2。1'' – Programmer879