项目中遇到了一个根据callback去设置几十种颜色设置的需求,如果用if 或者switch去写,将会很多代码,现在写了一个映射的方法去获取colors id的方法。
colors.xml文件中定义几个颜色,比如我定义了一个name为test_color_xx的4个颜色。
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools">
<color name="test_color_1">#05ffd1</color>
<color name="test_color_2">#05ffd2</color>
<color name="test_color_3">#05ffd3</color>
<color name="test_color_4">#05ffd4</color>
</resources>
通过java映射出来test_color_xx颜色的ID的方法。
public static int valueToColor(int value) {
LogUtils.d(TAG, "valueToColor value == " + value);
int defColor = -1;
//拼接出来color name
String colorName = "test_color_" + value;
try {
Class res = R.color.class;//获取color类
Field field = res.getField(colorName);
//获取colorName为test_color_xx的color id
defColor = field.getInt(null);
} catch (NoSuchFieldException | IllegalAccessException e) {
e.printStackTrace();
}
return defColor;
}
剩下的就是TextView.setTextColor(valueToColor(1));就可以了。
这个方法可以省去很对代码逻辑,记录下来,也留给需要的打工人。。。