2016-10-02 76 views
2

在我values文件夹我有my_colors.xml可能用字符串获取颜色?

<resources> 
    <!-- Orange --> 
    <color name="orangePrimary">#f6a02d</color> 
    <color name="orange1">#e3952a</color> 
    <color name="orange2">#da8f28</color> 
    <color name="orange3">#d08926</color> 
</resources> 

有没有办法让这些颜色只是它的名字的字符串? 喜欢的东西view.setBackgroundColor.getColor("orange1");

对于图像你有这样的getResources().getIdentifier("my_image", "drawable", getPackageName());

希望你们明白我的意思。 问候。

回答

4

你有没有试过如下:

int desiredColour = getResources().getColor(getResources().getIdentifier("my_color", "color", getPackageName())); 

希望它能帮助!

+0

是的,Reaz Murshed建议他在改变他的答案之前。 “desiredColour”总是错误的,我不知道为什么,但在我的情况下,它始终是那种深色透明的紫色 – kuemme01

+0

当然,我已经更新了我的答案 您首先获取资源ID,然后您必须从资源ID – mihanovak1024

+0

UUhhhh,这工作!但我没有得到问题,在未来的方法getColor()? – kuemme01

0

从Android的支持库23,一个新的的getColor()开始,方法已经被添加到ContextCompat

所以,只要致电:

ContextCompat.getColor(context, R.color.your_color); 

另一种是depracated getResources.getColor()所以你需要实现以上。没有任何方法只是通过颜色的名称来访问它。您必须从颜色文件中提供颜色标识。

+0

多数民众赞成在这么冷酷!我有8种不同的颜色,每种都有4种不同的色温。为了知道哪一个是需要的,我得到一个像“橙色”的字符串。 – kuemme01

1

好吧,我现在用反射名称得到了颜色,并在我身边得到了这个工作。

你需要编写一个像这样的函数。

public int getColorByName(String name) { 
    int colorId = 0; 

    try { 
     Class res = R.color.class; 
     Field field = res.getField(name); 
     colorId = field.getInt(null); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 

    return colorId; 
} 

现在得到使用

int resourceId = getColorByName("orange1"); 

而且资源ID设置绘制作为资源ImageView这样。

imageView.setBackgroundResource(resourceId); 

我试着设置img.setBackgroundColor(resourceId)这是设置错了颜色。

在你的情况我想建议,以保持颜色的类型数组在res/values/arrays.xml这样

<array name="colors"> 
    <item>#FFFF0000</item> 
    <item>#FF00FF00</item> 
    <item>#FF0000FF</item> 
</array> 

查看开发商的文档为Typed Array有关如何使用它。

+0

不行,没有工作。总是返回0. – kuemme01

+0

是的,试过了,放回了错误的颜色。我没有创造一种颜色,某种深色的透明紫色。 – kuemme01

+0

请参阅最新的答案。知道它在我身边工作。 –