在我的values
文件夹中,我有my_colors.xml
:
<resources>
<!-- Orange -->
<color name="orangePrimary">#f6a02d</color>
<color name="orange1">#e3952a</color>
<color name="orange2">#da8f28</color>
<color name="orange3">#d08926</color>
</resources>
有没有办法只使用其名称字符串获取这些颜色?
像view.setBackgroundColor.getColor("orange1");
对于图像,您有getResources().getIdentifier("my_image", "drawable", getPackageName());
希望你们知道我的意思。 问候。
答案 0 :(得分:5)
您是否尝试过以下操作:
int desiredColour = getResources().getColor(getResources().getIdentifier("my_color", "color", getPackageName()));
希望它有所帮助!
答案 1 :(得分:1)
好吧,我现在用反射的名字得到颜色,让这个在我这边工作。
你需要写一个这样的函数。
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;
}
现在使用
获取资源IDint resourceId = getColorByName("orange1");
并且在您的ImageView
中将drawable设置为资源。
imageView.setBackgroundResource(resourceId);
我尝试设置设置错误颜色的img.setBackgroundColor(resourceId)
。
在您的情况下,我建议您在res/values/arrays.xml
这样的类型数组中保留颜色
<array name="colors">
<item>#FFFF0000</item>
<item>#FF00FF00</item>
<item>#FF0000FF</item>
</array>
请参阅Typed Array的开发人员文档,了解如何使用它。
答案 2 :(得分:0)
从Android支持库23开始, ContextCompat 中添加了一个新的 getColor()方法。
所以,请致电:
ContextCompat.getColor(context, R.color.your_color);
另一个是depracated getResources.getColor()所以你需要实现上面的。没有任何方法只是传递颜色的名称来访问它。你必须从你的颜色文件中给出颜色ID。