Android通过注解初始化View
来源:互联网 发布:截图软件电脑版 编辑:程序博客网 时间:2024/05/20 21:48
本文提炼出一个精简实用版的InjectView工具类,并提供资源下载,省去findViewById()的麻烦。同时梳理这个实现的过程,供后来的童鞋学习和参考~
以前用起来相关工具觉得高大上,其实这个过程也蛮简单的~
梳理一下!
首先,注解的概念:它是一个和类,接口,枚举同级别的一个特性,可以声明在方法参数,类,字段前面,对它们作出解释和说明。
也就是说,注解标识了代码里的元数据,你可以根据这个标识来做你想做的事情
比如常见的@Override,@param,@retur等等。
这些注解的存在使得在生成文档、编译器进行编译检查、甚至在阅读代码时都非常方便,作用很大。
然后,我们要利用注解,当然首先要自定义一个我们自己的注解了,步骤很简单,就像写一个普通类一样,根据格式来,@interface 表示一个注解,代码如下:
package com.cc.library.annotation;import java.lang.annotation.Documented;import java.lang.annotation.ElementType;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;import java.lang.annotation.Target;/** * 用于findView的注解 * Created by zhangyu on 2016-07-11 11:04. */@Target(ElementType.FIELD) //表示用在字段上@Retention(RetentionPolicy.RUNTIME) //表示其生命周期是运行时public @interface ViewInject { int value() default 0;}
有了自己的注解,下一步就可以在代码里利用它和自己声明的字段相关联了,如下:
@ViewInject(R.id.round_image) private ImageView roundImage;字段roundImage就和常量R.id.round_image关联起来了
然后,我们利用反射,获取指定类(一般是一个Activity)的字段,然后给它赋上相应的值,示例如下:
public static void injectView(Activity activity){ try { Field[] fields = activity.getClass().getDeclaredFields(); //获取类中声明的字段 for (Field field : fields) { boolean isAnnotationPresent = field.isAnnotationPresent(ViewInject.class); //字段是否关联注解 if(isAnnotationPresent){ ViewInject viewInject = field.getAnnotation(ViewInject.class); //获取所关联的注解 field.setAccessible(true); field.set(activity,activity.findViewById(viewInject.value())); //为字段设置findViewById值 } } } catch (IllegalAccessException e) { e.printStackTrace(); } }
然后就完成给View注解和赋值了,短短几行代码,就可以大大提高编程效率。
使用也很简单:
public class MainActivity extends AppCompatActivity implements View.OnClickListener { private static final String TAG = "MainActivity"; @ViewInject(R.id.round_image) private ImageView roundImage; @ViewInject(R.id.scale_big_image) private ImageView bigImage; @ViewInject(R.id.scale_big_image_container) private RelativeLayout bigImgContainer; private Drawable imageDrawable; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ViewInjectUtil.injectView(this);//给关联注解的字段设置findViewById()值 }}
当然,这是我提炼出来的一个极精简版,github上有功能更丰富的工具包,可以自己去找找。
本文资源下载地址:http://download.csdn.net/detail/chen_zhang_yu/9572950
0 0
- Android通过注解初始化View
- Android通过注解初始化View
- Android通过注解初始化View
- Android通过注解初始化View
- Android通过注解初始化View
- Android通过注解初始化View
- Android通过注解初始化绑定View
- 通过注解初始化绑定View
- android注解初始化view
- Android 通过Annotation(注解方式)实现IOC,设置点击事件,初始化View
- Android通过注解来初始化控件
- Android Annotation(注解),简化View控件的初始化操作。
- 利用注解初始化View对象
- Android:注解初始化findViewById
- android View 动态注解方式,初始化注入对象原理及实现过程
- android : 使用注解初始化控件
- Android 懒人的初始化view
- Android View初始化基本流程
- 内存池
- 表单样式
- 【持久化框架】SpringMVC+Spring4+Mybatis3集成,开发简单Web项目+源码下载
- Android5.0双卡分析
- 单例模式【Singleton Pattern】
- Android通过注解初始化View
- Linux异步信号IO模型
- BZOJ1336 [Balkan2002]Alien最小圆覆盖
- 易语言 写注册项恶搞到你重装系统
- java实现记事本之Java记事本源码及实现
- 什么是Redis
- 等式变换
- Tomcat的目录结构及用途
- Android——微信支付