如何获取具有已知颜色名称的颜色ID

时间:2013-08-09 09:37:32

标签: android

我在/values/colors.xml中定义了一些颜色。

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

4 个答案:

答案 0 :(得分: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");

答案 1 :(得分:2)

Resources中有一个名为getIdentifier的专用方法 这是正常的"实现你搜索的方式。

尝试

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

其中thisActivity或任何Context子类引用。 (如果需要,请替换getActivity()。)
这被认为是缓慢但是imo,这不应该比通过接受的答案所暗示的反射机制访问字段慢。

描述了某些资源类型的使用示例here

答案 2 :(得分:1)

获得Context后,您可以致电getResources() - 获取Resources引用,然后查询它以获取colorid资源。

答案 3 :(得分: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)