2011-02-17 23 views
59

如果我定義的資源彩色Android開彩的字符串值

<resources> 
    <color name="someColor">#123456</color> 
</resources> 

有可能通過其ID設置顏色,像

view.setTextColor(R.color.someColor); 

是否也可以從中獲取顏色字符串值colors.xml?

喜歡的東西

colorStr = getColor(R.color.someColor); 
// -> colorStr = "#123456" 

如果是的話,任何人可以舉個例子?

謝謝

回答

96

這是你的答案

colorStr=getResources().getString(R.color.someColor); 

你會得到

colorStr = "#123456" 
+4

先謝謝了。我沒有想過使用getString來設置顏色。它的作品,而不是colorStr =「#123456」我得到了「#ff123456」,這不是很好:( – Tima 2011-02-17 09:47:17

+0

當然,我可以削減'ff'出來,但我嘗試以其他方式解決我的問題 – Tima 2011-02-17 09:47:57

+0

和你的其他方式是什麼? – 2011-02-17 09:51:22

1

我不認爲這是標準功能爲。但是,您可以將返回值從getColor()轉換爲十六進制,並將十六進制值轉換爲字符串。

hex 123456 = int 1193046;

84

只是爲了方便copypasta的緣故:

"#" + Integer.toHexString(ContextCompat.getColor(getActivity(), R.color.some_color)); 

或者,如果你想讓它不透明度:

"#" + Integer.toHexString(ContextCompat.getColor(getActivity(), R.color.some_color) & 0x00ffffff); 
19

以上提供的答案是不會更新。

請試試這個

String colorHex = "#" + Integer.toHexString(ContextCompat.getColor(getActivity(), R.color.dark_sky_blue) & 0x00ffffff); 
3

對於21以上的API,你可以使用

getString(R.color.color_name); 

這將返回的顏色以字符串格式。 要轉換到以整數格式的顏色(有時僅整數接受)然後:

Color.parseColor(getString(R.color.color_name)); 

上述表達式返回整數等效在color.xml文件

7

原因getResources().getColor需要API定義的顏色的> 23。因此,這是更好的: 只是爲了便於複製粘貼&的緣故:

Integer.toHexString(ContextCompat.getColor(getContext(), R.color.someColor));

或者,如果你想讓它不透明度:`

Integer.toHexString(ContextCompat.getColor(getContext(), R.color.someColor) & 0x00ffffff);

1

這是我怎麼樣了做到這一點:

String color = "#" + Integer.toHexString(ContextCompat.getColor 
(getApplicationContext(), R.color.yourColor) & 0x00ffffff); 
1

這裏所有的解決方案使用Integer.toHexString()中斷如果你的十六進制字符串中有前導零。顏色如#0affff將導致#affff。而不是使用這樣的:

String.format("#%06x", ContextCompat.getColor(this, R.color.your_color) & 0xffffff) 

或字母:

String.format("#%08x", ContextCompat.getColor(this, R.color.your_color) & 0xffffffff)