xUtils系列之ViewUtils-ResInject注解

ResInject注解定义:
@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);
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值