Android将颜色作为字符串值

Tim*_*ima 89 android colors

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

<resources>
    <color name="someColor">#123456</color>
</resources>
Run Code Online (Sandbox Code Playgroud)

它可以通过id设置颜色,比如

view.setTextColor(R.color.someColor);
Run Code Online (Sandbox Code Playgroud)

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

就像是

colorStr = getColor(R.color.someColor);
// -> colorStr = "#123456"
Run Code Online (Sandbox Code Playgroud)

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

谢谢

Tan*_*dal 133

这是你的答案

colorStr=getResources().getString(R.color.someColor);
Run Code Online (Sandbox Code Playgroud)

你会得到

 colorStr = "#123456"
Run Code Online (Sandbox Code Playgroud)

  • 这不再起作用,错误'String类型的预期资源' (72认同)
  • @CliveJefferies您可以在语句上方添加`// noinspection ResourceType`. (20认同)
  • `getResources().getString(0 + R.color.someColor);`有效 (12认同)
  • 返回颜色字符串的简单子字符串,用于删除Alpha工作..getResources()的getString(R.color.my_colour).substring(3); (7认同)
  • 首先,谢谢.我没想过用getString来表示颜色.它的工作原理,但不是colorStr ="#123456"我得到"#ff123456",这不是很好:( (5认同)
  • 这将产生错误,例如“ String类型的预期资源”。使用下面的代码获取十六进制值。``字符串colorStr =“#” + Integer.toHexString(getResources()。getColor(R.color.colorPrimaryDark));`'' (2认同)

kod*_*odi 131

只为了简单的copypasta:

"#" + Integer.toHexString(ContextCompat.getColor(getActivity(), R.color.some_color));
Run Code Online (Sandbox Code Playgroud)

或者如果你想要它没有透明度:

"#" + Integer.toHexString(ContextCompat.getColor(getActivity(), R.color.some_color) & 0x00ffffff);
Run Code Online (Sandbox Code Playgroud)

  • 这应该被认为是正确的答案! (14认同)
  • 这很好用,但是我需要使用`'#'+ Integer.toHexString(getResources().getColor(R.color.someColor);`来修改它,因为后来我在`Color.parseColor中使用它' (7认同)
  • 如果初始颜色为0,则无效. (6认同)
  • geColor()需要api> 23 (4认同)

Sol*_*dak 25

上面提供的答案不会更新.

请试试这个

String colorHex = "#" + Integer.toHexString(ContextCompat.getColor(getActivity(), R.color.dark_sky_blue) & 0x00ffffff);
Run Code Online (Sandbox Code Playgroud)


Flo*_*n M 11

Integer.toHexString()如果你的十六进制字符串中有前导零,那么这里的所有解决方案都使用break.颜色#0affff会导致#affff.请改用:

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

或者使用alpha:

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

  • 在 Kotlin 中: String.format("#%06x", ContextCompat.getColor(context, color) 和 0xffffff) (3认同)

Hon*_*.Wu 9

因为getResources().getColor需要api> 23.所以这更好:只是为了方便复制和粘贴:

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

或者如果你想要它没有透明度:`

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


小智 6

对于 21 以上的 API,您可以使用

getString(R.color.color_name);
Run Code Online (Sandbox Code Playgroud)

这将以字符串格式返回颜色。要将其转换为整数格式的颜色(有时只接受整数),则:

Color.parseColor(getString(R.color.color_name));
Run Code Online (Sandbox Code Playgroud)

上面的表达式返回 color.xml 文件中定义的颜色的等效整数


小智 5

这个对我有用!

String.format("#%06x", ContextCompat.getColor(this, R.color.my_color) & 0xffffff)
Run Code Online (Sandbox Code Playgroud)