Android 批量获取颜色然后转换成json格式
在需要获取大量color时。目前Android有的几种方法:
定义一个string-array 写入需要获取的color 的name。然后
int colorId = getResources().getIdentifier(name, "color", getContext().getPackageName());
(不靠谱)当需要获取的color在一个xml中时,在需要获取的color第一个前和最后一个后,定义一个专门用于获取id的color。然后循环获取R.color.start int值与结束int值之间的颜色。。不靠谱。但似乎没有问题。
我最终选择的方法:根据R.color.class.getDeclaredFields() 获取所有color的Field,然后转json
Field[] fields = R.color.class.getDeclaredFields();
for(int i = 0;i < fields.length; i++){
fields[i].setAccessible(true);
String name = fields[i].getName();
int colorId = getResources().getIdentifier(name, "color", getContext().getPackageName());
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
int intColor = getResources().getColor(colorId , theme);
stringBuffer.append("\"");
stringBuffer.append(name);
float alpha = (intColor & 0xff000000) >>> 24;
String red = Integer.toHexString((intColor & 0x00ff0000) >> 16);
String green = Integer.toHexString((intColor & 0x0000ff00) >> 8);
String blue = Integer.toHexString((intColor & 0x000000ff));
stringBuffer.append("\":[{\"Alpha\":\"");
stringBuffer.append(String.format("%.2f",alpha / 255.0));
stringBuffer.append("\",\"Color\":\"#");
stringBuffer.append(red.length() == 1?"0" + red : red);
stringBuffer.append(green.length() == 1?"0" + green : green);
stringBuffer.append(blue.length() == 1?"0" + blue : blue);
stringBuffer.append("\"}],");
}
}