1

我在/values/colors.xml.

如何以编程方式获取某种颜色的 id,例如R.color.my_color,如果我知道颜色的名称。

4

4 回答 4

6

尝试这个:

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;
}

在你的情况下namemy_color

getColorByName("my_color");
于 2013-08-09T09:44:26.237 回答
2

Resources在被调用中有一个专门的方法getIdentifier
这是实现您搜索的“正常”方式。

尝试

final int lMyColorId = this.getResources().getIdentifier("my_color", "color", this.getPackageName());

wherethis是一个Activity或任何子Context类引用。(getActivity()如果需要,请替换。)
据说这很慢,但 imo,这不应该比通过接受的答案建议的反射机制访问字段慢。

此处描述了某些资源类型的使用示例。

于 2014-03-27T13:52:57.043 回答
1

一旦你有了Context你就可以调用getResources()-- 来获取Resources参考,然后查询它来获取color资源id

于 2013-08-09T09:43:10.650 回答
0

我发现接受的答案不起作用,因为当我尝试设置背景时,ImageView它没有设置正确的颜色。但是后来我尝试将背景设置为资源,并且效果很好。

因此,如果有任何其他混淆,我只想复制@MarcinOrlowski 的答案并将所有这些放在一起。

所以这是使用反射来获取颜色的资源ID的函数。

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("my_color");

当您使用此处获得的资源 ID 设置此颜色时,您需要执行此操作。

myImageView.setBackgroundResource(resourceId);

我尝试myImageView.setBackgroundColor(resourceId)了不起作用的设置。

于 2016-10-02T14:06:32.063 回答