Android通过注解初始化View

本文介绍了一个简化版的InjectView工具类,该工具通过自定义注解简化findViewById操作,提高编程效率。文章详细讲解了自定义注解的创建及使用方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文提炼出一个精简实用版的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.youkuaiyun.com/detail/chen_zhang_yu/9572950



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值