我在/values/colors.xml
.
如何以编程方式获取某种颜色的 id,例如R.color.my_color
,如果我知道颜色的名称。
尝试这个:
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;
}
在你的情况下name
是my_color
:
getColorByName("my_color");
Resources
在被调用中有一个专门的方法getIdentifier
。
这是实现您搜索的“正常”方式。
尝试
final int lMyColorId = this.getResources().getIdentifier("my_color", "color", this.getPackageName());
wherethis
是一个Activity
或任何子Context
类引用。(getActivity()
如果需要,请替换。)
据说这很慢,但 imo,这不应该比通过接受的答案建议的反射机制访问字段慢。
此处描述了某些资源类型的使用示例。
一旦你有了Context
你就可以调用getResources()
-- 来获取Resources
参考,然后查询它来获取color
资源id
。
我发现接受的答案不起作用,因为当我尝试设置背景时,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)
了不起作用的设置。