从R.color以编程方式检索颜色会返回错误的颜色

时间:2015-04-28 00:29:28

标签: android xml colors

我正在尝试使用用户的xml文件中列出的颜色名称并返回十六进制颜色。我正在使用基于帖子Retrieve color programmatically from R.color的代码。我知道我很接近,因为当我在哈希映射中有一小组颜色时,名称作为键正常工作,但文件中超过300种颜色并且寻找5或6似乎浪费了处理时间。下面的代码是正在使用的代码,但如果需要,我可以包含更多代码。

用户的xml文件示例。

<Item>
    <Item_Name>Daily</Item_Name>
    <Price>400</Price>
    <Type>Entry</Type>
    <Color>Green</Color>
</Item>

colors.xml

 <color name="green">#008000</color>

爪哇:

 0   **pass in name from method call**
 1   Class res = R.color.class;
 2   Field field = res.getField( name );
 3   color = field.getInt(null);

当我以调试方式运行时,给出的结果如下:

0: name = "green"
1: res = tech.travis.poolpos.R$color
2: field = public static final int tech.travis.poolpos.R$color.green
3: color = 2131099743 (integer).  This translates to #&5f00067f,
     which is about a navy blue with an opacity of about 37%.

应为绿色返回的整数应为-16744448,而不是2131099743.

如果可能的话,我如何将名称作为字符串并匹配并返回colors.xml中列出的颜色?

2 个答案:

答案 0 :(得分:5)

这是颜色的id,而不是颜色本身。要获得所需的颜色,请改为getResources().getColor(field.getInt(null));

R上的所有内容都是ID。这就是我们使用getColorgetDrawable等方法作为参数R.color.my_colorR.drawable.my_drawable的原因。

答案 1 :(得分:0)

resources.getColor 已弃用。获取颜色的新方法是:

ContextCompat.getColor(context, R.color.color_name)