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)