Android获取颜色作为string值
如果我在资源中定义颜色
<resources> <color name="someColor">#123456</color> </resources>
可以通过它的id来设置颜色
view.setTextColor(R.color.someColor);
是否也可以从colors.xml中获取颜色string值?
就像是
colorStr = getColor(R.color.someColor); // -> colorStr = "#123456"
如果是的话,谁能举个例子?
谢谢
这是你的答案
colorStr=getResources().getString(R.color.someColor);
你会得到
colorStr = "#123456"
只是为了方便copypasta:
"#" + Integer.toHexString(ContextCompat.getColor(getActivity(), R.color.some_color));
或者,如果你想要它没有透明度:
"#" + Integer.toHexString(ContextCompat.getColor(getActivity(), R.color.some_color) & 0x00ffffff);
上面提供的答案没有更新。
请试试这个
String colorHex = "#" + Integer.toHexString(ContextCompat.getColor(getActivity(), R.color.dark_sky_blue) & 0x00ffffff);
导致getResources().getColor
需要api> 23.所以这是更好的:只是为了方便复制和粘贴:
Integer.toHexString( ContextCompat.getColor( getContext(), R.color.someColor ) );
或者如果你想不透明:`
Integer.toHexString( ContextCompat.getColor( getContext(), R.color.someColor ) & 0x00ffffff );
对于21以上的API,您可以使用
getString(R.color.color_name);
这将返回string格式的颜色。 要将其转换为整数格式的颜色(有时只接受整数),则:
Color.parseColor(getString(R.color.color_name));
上面的expression式返回color.xml文件中定义颜色的整数值
我不认为有这样的标准function。 但是,您可以将getColor()
的返回值转换为hex,并将hex值转换为string。
hex123456 = int 1193046;
这是我做到的:
String color = "#" + Integer.toHexString(ContextCompat.getColor (getApplicationContext(), R.color.yourColor) & 0x00ffffff);
如果您的hexstring中的前导零为零,则所有使用Integer.toHexString()
的解决scheme都会中断。 像#0affff
这样的颜色会导致#affff
。 用这个代替:
String.format("#%06x", ContextCompat.getColor(this, R.color.your_color) & 0xffffff)
或用alpha:
String.format("#%08x", ContextCompat.getColor(this, R.color.your_color) & 0xffffffff)