Android程序员可以使用包含颜色名称和十六进制代码的XML文件,例如:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="White">#FFFFFF</color>
<color name="Ivory">#FFFFF0</color>
...
<color name="DarkBlue">#00008B</color>
<color name="Navy">#000080</color>
<color name="Black">#000000</color>
</resources>
我可以使用以下语法访问特定颜色:
TextView area1 = (TextView) findViewById(R.id.area);
area1.setBackgroundColor(Color.parseColor(getString(R.color.Navy)));
或
area1.setBackgroundColor(Color.parseColor("Navy"));
或
Resources res = getResources();
int rcol = res.getColor(R.color.Navy);
area1.setBackgroundColor(rcol);
如何将整个xml文件中的颜色读入颜色名称的String []和颜色资源的int [](例如,R.color.Navy),而不必指定每个颜色名称或资源ID ?
答案 0 :(得分:5)
使用反射API它相当简单(我很久以前就有类似drawable-id的问题),但是很多有经验的用户说,“对dalvik的反思真的很慢”,所以要警告! / p>
//Get all the declared fields (data-members):
Field [] fields = R.color.class.getDeclaredFields();
//Create arrays for color names and values
String [] names = new String[fields.length];
int [] colors = new int [fields.length];
//iterate on the fields array, and get the needed values:
try {
for(int i=0; i<fields.length; i++) {
names [i] = fields[i].getName();
colors [i] = fields[i].getInt(null);
}
} catch (Exception ex) {
/* handle exception if you want to */
}
然后,如果您有这些数组,那么您可以从中创建一个Map以便于访问:
Map<String, Integer> colors = new HashMap<String, Integer>();
for(int i=0; i<hexColors.length; i++) {
colors.put(colorNames[i], hexColors[i]);
}
答案 1 :(得分:0)
我认为您必须将color.xml文件移动到/ asset目录中。您将不得不“手动”解析XML,并且无法使用R.color。*语法。 (除非您选择复制文件)
答案 2 :(得分:0)
您可以在R.colors
上使用内省来查找所有字段名称和相关值。
R.colors.getClass().getFields()
会为您提供所有颜色的列表。
在每个字段上使用getName()
将为您提供所有颜色名称的列表,getInt()
将为您提供每种颜色的值。