2016-11-23 52 views
2

這可能是有史以來最簡單的事情,但對於我的生活,我還沒有弄明白。如何通過顏色資源作爲參數(Android)

我有一個方法設置佈局的背景顏色,但我想通過顏色作爲參數,就像我們用可繪製資源做的那樣。例如

public void setIcon (Drawable icon){ 
    this.icon = context.getResources().getDrawable(icon); 
} 

setIcon(R.drawable.tuborg); 

我希望能夠做類似於color (R.color.id)的事情。我試過

public void setColor (Color color){ 
    layout.setBackgroundColor(context.getResources().getColor(color)); 
} 

public void setColor (Color color){ 
    layout.setBackgroundColor(ContextCompat.getColor(color)); 
} 

兩者所要求的INT,甚至(int color)不起作用。另外我試圖避免Color.parse()。

這是我如何使用功能

setColor(R.color.colorAccent); 

我有不同的顏色代碼的XML。我希望能夠調用此函數並獲取背景顏色變化。

+0

public void setColor(int color){ layout.setBackgroudColor(color); } – Bhavnik

+0

謝謝@Bhavnik,但這並不奏效。我說在這個問題... –

+0

你正在分配值layout.setBackgroundColor,而不是設置顏色直接不工作? – Bhavnik

回答

4

你可以試試這個:

public void setColor (int colorId){ 
    layout.setBackgroundColor(ContextCompat.getColor(colorId)); 
} 

在該方法中colorId應該是顏色的六碼

一個好的做法是在colors.xml中定義顏色(在值文件夾內)。

<?xml version="1.0" encoding="UTF-8"?> 
<resources> 
    <color name="red">#FF0000</color> 
</resources> 

在這種情況下,你會使用這個功能是這樣的:

setColor(R.color.red); 

所以,沒有必要創建一個「色」的對象,可以從顏色傳遞值。xml

另外,在你的情況下,你應該修改方法setColor(Color aColor)爲setColor(int aColor)以使它可以使用xml顏色資源。

+0

不工作,期望顏色類型的資源。是的,我有xml。這就是我想要引用 –

+0

@MueyiwaMosesIkomi你通過做這個R.color.your_color_in_colors_xml引用? 你能告訴我哪一類是「佈局」? – shollmann

+0

是的請@shollmann,我編輯了問題正文 –

3

您需要一個顏色資源ID。它開始於R.color這實際上是一個整數ID

public void setColor (@ColorInt int colorId){ // integer id 
    layout.setBackgroundColor(ContextCompat.getColor(colorId)); 
} 

UPDATE

雖然你使用它像setColor(R.color.colorAccent),但仍然您功能參數需要一個color例如

的setColor(顏色顏色)

。您需要將函數參數類型更新爲int,就像我在上面的代碼片段中那樣。

的setColor(INT顏色)

ContextCompat.getColor的文檔

同樣。

返回與特定資源ID.Starting在 {@link android.os.Build.VERSION_CODES#m的}相關的顏色,返回的顏色將 風格爲指定的上下文的主題。

@param id所需的資源標識符,由aapt 工具生成。此整數對包,類型和資源條目進行編碼。 值0是無效的標識符。

@return形式爲0xAARRGGBB的單一顏色值。

2

首先,它看起來像你試圖設置View這不是一個存在於Java中的概念的屬性。所以,你真正想要的是:

layout.setBackgroundColor(context.getResources().getColor(R.color.colorRes));

View#setBackgroundColor()格式#AARRGGBB預計顏色整數其中

A =阿爾法 R =紅 G =綠色 B =藍色。

因此要設置顏色純正的紅色,你可以做這樣的事情:

layout.setBackgroundColor(0xFFFF0000);

純藍:

layout.setBackgroundColor(0xFF0000FF);

純綠色:

layout.setBackgroundColor(0xFF00FF00);

對於Resources#getColor(int);,期望獲得所需顏色的資源ID。在這種情況下,您需要將colors.xml放入項目的res/values文件夾中。然後有這樣的事情:

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <color name="colorPrimary">#3F51B5</color> 
</resources> 

然後你可以檢索的顏色,像這樣:

int color = context.getResources().getColor(R.color.colorPrimary); 

或者,如果你在API 23或更高:

int color = context.getColor(R.color.colorPrimary); 

還是比較簡單ContextCompat方法:

int color = ContextCompat.getColor(R.color.colorPrimary); 

然後,你可以用它設置背景顏色,像這樣:

view.setBackgroundColor(color); 

最後,如果你不想做任何的是,你可以簡單地直接設置它的查看,像這樣:

view.setBackgroundResource(R.color.colorPrimary); 
+0

所以真的沒有辦法將R.color.id附加到context.getResources()。getColor(R.id.colorRes); –

+0

@MueyiwaMosesIkomi不知道你是什麼意思。 'R.id'是一個資源ID。除此之外,這並不意味着什麼。它只是意味着鏈接到資源。另外,我搞砸了。它應該是'R.color.',因爲它是一種顏色資源。 – DeeV

+0

@MueyiwaMosesIkomi:我已經編輯了相當多的答案。希望你會在那裏找到有幫助的東西。 – DeeV