xUtils框架的注解相信大家都使用过,由于各种原因,项目需要自己写一个,所以mark一下
这是用法 基本和xUtils的一样
@HkContentView(R.layout.activity_main)
public class MainActivity extends AppCompatActivity {
新建一个ContentView类
@Target(ElementType.TYPE)//注解目标 TYPE:类
@Retention(RetentionPolicy.RUNTIME)
public @interface HkContentView {
int value();//接收布局id
}
主要代码:利用反射来完成(代码都有注释)
/**
* 传需注解activity
*
* @param activity
*/
public static void HKinjectContentView(Activity activity) {
Class activityClass = activity.getClass();//获取activity.class
if (activityClass.isAnnotationPresent(HkContentView.class)) {//判断这个class有没有用注解
// 得到activity这个类的ContentView注解
HkContentView contentView = (HkContentView) activityClass.getAnnotation(HkContentView.class);//获取注解文件
// 获取注解的值(布局ID)
int layoutId = contentView.value();
// 使用反射调用setContentView
try {
Method method = activityClass.getMethod("setContentView", int.class);
//私有方法
method.setAccessible(true);
method.invoke(activity, layoutId);
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
}
}