2017-07-31 41 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