我在/values/colors.xml
中定义了一些颜色。
如何以编程方式获取某种颜色的ID,例如R.color.my_color
如果我知道颜色的名称。
答案 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;
}
,在您的情况下,name
为my_color
:
getColorByName("my_color");
答案 1 :(得分:2)
Resources
中有一个名为getIdentifier
的专用方法
这是正常的"实现你搜索的方式。
尝试
final int lMyColorId = this.getResources().getIdentifier("my_color", "color", this.getPackageName());
其中this
是Activity
或任何Context
子类引用。 (如果需要,请替换getActivity()
。)
这被认为是缓慢但是imo,这不应该比通过接受的答案所暗示的反射机制访问字段慢。
描述了某些资源类型的使用示例here。
答案 2 :(得分:1)
获得Context
后,您可以致电getResources()
- 获取Resources
引用,然后查询它以获取color
和id
资源。
答案 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)
。