可以用字符串获得颜色?

时间:2016-10-02 13:03:32

标签: android string colors android-resources

在我的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());

希望你们知道我的意思。 问候。

3 个答案:

答案 0 :(得分:5)

您是否尝试过以下操作:

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

希望它有所帮助!

答案 1 :(得分: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;
}

现在使用

获取资源ID
int resourceId = getColorByName("orange1");

并且在您的ImageView中将drawable设置为资源

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的开发人员文档,了解如何使用它。

答案 2 :(得分:0)

从Android支持库23开始, ContextCompat 中添加了一个新的 getColor()方法。

所以,请致电:

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

另一个是depracated getResources.getColor()所以你需要实现上面的。没有任何方法只是传递颜色的名称来访问它。你必须从你的颜色文件中给出颜色ID。