2016-10-02 80 views
2

在我values文件夾我有my_colors.xml可能用字符串獲取顏色?

<resources> 
    <!-- Orange --> 
    <color name="orangePrimary">#f6a02d</color> 
    <color name="orange1">#e3952a</color> 
    <color name="orange2">#da8f28</color> 
    <color name="orange3">#d08926</color> 
</resources> 

有沒有辦法讓這些顏色只是它的名字的字符串? 喜歡的東西view.setBackgroundColor.getColor("orange1");

對於圖像你有這樣的getResources().getIdentifier("my_image", "drawable", getPackageName());

希望你們明白我的意思。 問候。

回答

4

你有沒有試過如下:

int desiredColour = getResources().getColor(getResources().getIdentifier("my_color", "color", getPackageName())); 

希望它能幫助!

+0

是的,Reaz Murshed建議他在改變他的答案之前。 「desiredColour」總是錯誤的,我不知道爲什麼,但在我的情況下,它始終是那種深色透明的紫色 – kuemme01

+0

當然,我已經更新了我的答案 您首先獲取資源ID,然後您必須從資源ID – mihanovak1024

+0

UUhhhh,這工作!但我沒有得到問題,在未來的方法getColor()? – kuemme01

0

從Android的支持庫23,一個新的的getColor()開始,方法已經被添加到ContextCompat

所以,只要致電:

ContextCompat.getColor(context, R.color.your_color); 

另一種是depracated getResources.getColor()所以你需要實現以上。沒有任何方法只是通過顏色的名稱來訪問它。您必須從顏色文件中提供顏色標識。

+0

多數民衆贊成在這麼冷酷!我有8種不同的顏色,每種都有4種不同的色溫。爲了知道哪一個是需要的,我得到一個像「橙色」的字符串。 – kuemme01

1

好吧,我現在用反射名稱得到了顏色,並在我身邊得到了這個工作。

你需要編寫一個像這樣的函數。

public int getColorByName(String name) { 
    int colorId = 0; 

    try { 
     Class res = R.color.class; 
     Field field = res.getField(name); 
     colorId = field.getInt(null); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 

    return colorId; 
} 

現在得到使用

int resourceId = getColorByName("orange1"); 

而且資源ID設置繪製作爲資源ImageView這樣。

imageView.setBackgroundResource(resourceId); 

我試着設置img.setBackgroundColor(resourceId)這是設置錯了顏色。

在你的情況我想建議,以保持顏色的類型數組在res/values/arrays.xml這樣

<array name="colors"> 
    <item>#FFFF0000</item> 
    <item>#FF00FF00</item> 
    <item>#FF0000FF</item> 
</array> 

查看開發商的文檔爲Typed Array有關如何使用它。

+0

不行,沒有工作。總是返回0. – kuemme01

+0

是的,試過了,放回了錯誤的顏色。我沒有創造一種顏色,某種深色的透明紫色。 – kuemme01

+0

請參閱最新的答案。知道它在我身邊工作。 –