如果我在资源中定义了一种颜色
<resources>
<color name="someColor">#123456</color>
</resources>
可以通过其ID设置颜色,例如
view.setTextColor(R.color.someColor);
是否也可以从colors.xml获取颜色字符串值?
像
这样的东西colorStr = getColor(R.color.someColor);
// -> colorStr = "#123456"
如果是,可以举个例子吗?
谢谢
答案 0 :(得分:126)
这是你的答案
colorStr=getResources().getString(R.color.someColor);
你会得到
colorStr = "#123456"
答案 1 :(得分:118)
只是为了简单的copypasta:
"#" + Integer.toHexString(ContextCompat.getColor(getActivity(), R.color.some_color));
或者如果你想要它没有透明度:
"#" + Integer.toHexString(ContextCompat.getColor(getActivity(), R.color.some_color) & 0x00ffffff);
答案 2 :(得分:24)
上面提供的答案不会更新。
请尝试这个
String colorHex = "#" + Integer.toHexString(ContextCompat.getColor(getActivity(), R.color.dark_sky_blue) & 0x00ffffff);
答案 3 :(得分:9)
原因getResources().getColor
需要api&gt; 23.所以这更好:
只是为了方便复制和粘贴:
Integer.toHexString( ContextCompat.getColor( getContext(), R.color.someColor ) );
或者如果你想要它没有透明度:`
Integer.toHexString( ContextCompat.getColor( getContext(), R.color.someColor ) & 0x00ffffff );
答案 4 :(得分:8)
如果你的十六进制字符串中有前导零,那么使用#0affff
的所有解决方案都会中断。像#affff
这样的颜色会产生String.format("#%06x", ContextCompat.getColor(this, R.color.your_color) & 0xffffff)
。请改用:
String.format("#%08x", ContextCompat.getColor(this, R.color.your_color) & 0xffffffff)
或使用alpha:
{{1}}
答案 5 :(得分:4)
对于21以上的API,您可以使用
getString(R.color.color_name);
这将以字符串格式返回颜色。 要将其转换为整数格式的颜色(有时只接受整数),则:
Color.parseColor(getString(R.color.color_name));
上面的表达式返回与color.xml文件中定义的颜色相当的整数
答案 6 :(得分:4)
对我有用!
String.format("#%06x", ContextCompat.getColor(this, R.color.my_color) & 0xffffff)
答案 7 :(得分:1)
我认为没有标准功能。但是,您可以将值的返回值从getColor()
转换为十六进制,并将十六进制值转换为字符串。
hex 123456 = int 1193046;
答案 8 :(得分:1)
我就是这样做的:
String color = "#" + Integer.toHexString(ContextCompat.getColor
(getApplicationContext(), R.color.yourColor) & 0x00ffffff);
答案 9 :(得分:1)
如果发生错误,请添加@SuppressLint(&#34; ResourceType&#34;)。像吼叫一样。
Rendered Template
答案 10 :(得分:-4)
如果您不想使用ContextCompat
或SuppressLint
,只需在string
下方添加一个color
资源。
代替
<color name="text_color">#FFFFFF</color>
使用
<color name="text_color">#FFFFFF</color>
<string name="text_color_string">#FFFFFF</string>
您的代码确实重复了很多,但是更加简洁。此外,更改string
后忘记忘记更新color
几乎是不可能的,因为它们彼此相邻。