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

Posted

技术标签:

【中文标题】如何获取具有已知颜色名称的颜色 ID【英文标题】:How do I get a color id with a known color name 【发布时间】:2013-08-11 05:02:24 【问题描述】:

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

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

【问题讨论】:

你可以使用:getResources().getColor(R.color.idname); 这是您要找的东西吗? Get color-int from color resource 【参考方案1】:

我发现接受的答案不起作用,因为当我尝试设置 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),但不起作用。

【讨论】:

【参考方案2】:

试试这个:

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

【讨论】:

当我使用此代码时,我得到 0 作为颜色 id【参考方案3】:

Resources 中有一个专用方法,称为getIdentifier。 这是实现搜索结果的“正常”方式。

试试

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

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

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

【讨论】:

虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接的答案可能会失效。 已更新。顺便说一句,我的回答是正确的,但不完整,你没有合法性拒绝它。特别是认为这是我在这个网站上的第一个答案,这种行为非常令人沮丧。 供您参考,我没有对您投反对票。我刚刚查看了您的答案并引导您走向正确的方向。【参考方案4】:

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

【讨论】:

以上是关于如何获取具有已知颜色名称的颜色 ID的主要内容,如果未能解决你的问题,请参考以下文章

json 具有RGB值的主题的颜色名称

如何获取具有已知资源名称的资源 id?

从 ARGB 和/或十六进制调色板中获取颜色名称 [重复]

js颜色的单词名称字符串转为rgb颜色值

在 Python 中将十六进制颜色代码转换为颜色名称

“颜色量化”是 OpenCV 中颜色量化的正确名称吗?