ResInject注解定义:
ViewUtils中的注解部分:
使用方法:
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface ResInject {
int id();
ResType type();
}
public enum ResType {
Animation,
Boolean,
Color,
ColorStateList,
Dimension,
DimensionPixelOffset,
DimensionPixelSize,
Drawable,
Integer,
IntArray,
Movie,
String,
StringArray,
Text,
TextArray,
Xml
}
public class ResLoader {
public static Object loadRes(ResType type, Context context, int id) {
if (context == null || id < 1) return null;
switch (type) {
case Animation:
return AnimationUtils.loadAnimation(context, id);
case Boolean:
return context.getResources().getBoolean(id);
case Color:
return context.getResources().getColor(id);
case ColorStateList:
return context.getResources().getColorStateList(id);
case Dimension:
return context.getResources().getDimension(id);
case DimensionPixelOffset:
return context.getResources().getDimensionPixelOffset(id);
case DimensionPixelSize:
return context.getResources().getDimensionPixelSize(id);
case Drawable:
return context.getResources().getDrawable(id);
case Integer:
return context.getResources().getInteger(id);
case IntArray:
return context.getResources().getIntArray(id);
case Movie:
return context.getResources().getMovie(id);
case String:
return context.getResources().getString(id);
case StringArray:
return context.getResources().getStringArray(id);
case Text:
return context.getResources().getText(id);
case TextArray:
return context.getResources().getTextArray(id);
case Xml:
return context.getResources().getXml(id);
default:
break;
}
return null;
}
}
ViewUtils中的注解部分:
ResInject resInject = field.getAnnotation(ResInject.class);
if (resInject != null) {
try {
Object res = ResLoader.loadRes(
resInject.type(), finder.getContext(), resInject.id());
if (res != null) {
field.setAccessible(true);
field.set(handler, res);
}
} catch (Throwable e) {
LogUtils.e(e.getMessage(), e);
}
}
使用方法:
@ContentView(R.layout.activity_main)
public class MainActivity extends Activity {
@ResInject(id=R.string.app_name,type=ResType.String)
public String app_name;
@ResInject(id=R.drawable.ic_launcher,type=ResType.Drawable)
public Drawable ic_launcher;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ViewUtils.inject(this);
}
}