尊重他人的劳动成果,转载请标明出处:http://blog.csdn.net/gengqiquan/article/details/70230597, 本文出自:【gengqiquan的博客】
前两篇博客我们唠了Java支持基本的注解以及Android Support Annotations库提供的静态检查类型的注解
今天我们来唠唠怎么自定义动态注解,并且实现一个控件自动绑定功能(老版本butterknife,新版本改成利用IDE插件预先编译了)以及通过注解设置activity主布局,通过这两个小例子来学习如何自定义自己的动态注解
首先我们定义一个注解。还叫BindView吧
/**
* Created by gengqiquan on 2017/4/18.
*/
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.CLASS)
@Documented
public @interface BindView {
@IdRes
int value();
}
和butterknife的一样,类文件中有效,在默认方法上加上 @IdRes,防止传入非资源ID的int值。
提供一个注入器,这里我们叫MagicHand
既然是动态解析注解,那我们就需要用到反射了,通过class的
target.getDeclaredFields()
取到类下面的所有成员
然后遍历成员集合,看是否有标记了@BindView注解的成员
for (Field f : fields) {
BindView bind = f.getAnnotation(BindView.class);
}
若能取到注解则表明这个成员是被@BindView注解了的,通过注解的默认方法
bind.value()
取出它的值也就是资源ID
然后通过activity的
activity.getWindow().getDecorView()
方法取到顶层view,这样我们就可以通过view的
findViewById()
方法来解析ID资源对应的控件了
完整类以及方法