如果我在资源中定义了一种颜色
<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)
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)
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)
因为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)