Android将颜色作为字符串值

时间:2011-02-17 09:17:14

标签: android colors

如果我在资源中定义了一种颜色

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

可以通过其ID设置颜色,例如

view.setTextColor(R.color.someColor);

是否也可以从colors.xml获取颜色字符串值?

这样的东西
colorStr = getColor(R.color.someColor);
// -> colorStr = "#123456"

如果是,可以举个例子吗?

谢谢

11 个答案:

答案 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)

如果您不想使用ContextCompatSuppressLint,只需在string下方添加一个color资源。

代替

<color name="text_color">#FFFFFF</color>

使用

<color name="text_color">#FFFFFF</color>
<string name="text_color_string">#FFFFFF</string>

您的代码确实重复了很多,但是更加简洁。此外,更改string后忘记忘记更新color几乎是不可能的,因为它们彼此相邻。

相关问题