38. Android 反射资源工具ReflectionUtil

原创 2015年11月21日 11:21:15

38. Android 反射资源工具ReflectionUtil


工具代码

ReflectionUtil

public class ReflectionUtil {

    public enum ResourcesType {
        styleable,
        style,
        string,
        mipmap,
        menu,
        layout,
        integer,
        id,
        drawable,
        dimen,
        color,
        bool,
        attr,
        anim
    }

    /**
     * 根据名字,反射取得资源
     *
     * @param context context
     * @param name    resources name
     * @param type    enum of ResourcesType
     * @return resources id
     */
    public static int getResourceId(Context context, String name, ResourcesType type) {
        String className = context.getPackageName() + ".R";
        try {
            Class<?> c = Class.forName(className);
            for (Class childClass : c.getClasses()) {
                String simpleName = childClass.getSimpleName();
                if (simpleName.equals(type.name())) {
                    for (Field field : childClass.getFields()) {
                        String fieldName = field.getName();
                        if (fieldName.equals(name)) {
                            try {
                                return (int) field.get(null);
                            } catch (IllegalAccessException e) {
                                e.printStackTrace();
                            }
                        }
                    }
                }
            }
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
        return -1;
    }

}

工具使用

ReflectionUtilActivity

public class ReflectionUtilActivity extends AppCompatActivity implements View.OnClickListener {

    ImageView imageView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        this.setContentView(R.layout.activity_reflection_util);

        this.imageView = (ImageView) this.findViewById(R.id.reflection_iv);
        this.findViewById(R.id.reflection_bt).setOnClickListener(this);
    }

    /**
     * Called when a view has been clicked.
     *
     * @param v The view that was clicked.
     */
    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.reflection_bt:
                /*
                 * 获取资源名为mm_1的mipmap类型文件
                 */
                this.imageView.setImageResource(ReflectionUtil.getResourceId(this, "mm_1", ReflectionUtil.ResourcesType.mipmap));
                break;
        }
    }
}

相关文章推荐

很有用的反射工具类

ReflectionUtils: package spring.jdbc; import java.lang.reflect.Field;import java.lang.reflect.Invoca...

反射工具类【ReflectionUtils】

反射工具类【ReflectionUtils】

Reflection:一个反射工具包ReflectionUtils

/**  * 反射的 Utils 函数集合  * 提供访问私有变量, 获取泛型类型 Class, 提取集合中元素属性等 Utils 函数  * @author Administrator  *...

Spring 中一个常用的反射类库ReflectionUtils

在项目中部分方法采用反射,通过类访问类的属性,通过类反问方法,通过属性访问方法。以及常用异常的处理在等可以使用反射出处理。   public abstract class ReflectionUtil...

Spring的反射工具类 ReflectionUtils

/* * Copyright 2002-2014 the original author or authors. * * Licensed under the Apache License, V...

android 巧妙利用反射机制得到ListView中的view

我们在使用ListView的时候,经常会使用的ViewHolder方式作为缓存,每次都需要手动的通过viewholder.icon = convertview.findVIewByid(id);一般的...

52.otto 源码解析

otto 源码解析Otto的源码非常简单,一共就九个类。项目结构 AnnotatedHandlerFinder ( 查找并缓存所有注解方法 ) Bus ( otto核心业务类,包括注册、反注册、发送事...

5.Android support design TabLayout

5.Android support design TabLayout Android support design TabLayout TabLayout介绍 gradle配置 TabLayout属性...

Android反射获取资源 id通用工具类

反射获取资源id

列举网络上所有资源(38KB)

  • 2006年02月23日 09:05
  • 38KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:38. Android 反射资源工具ReflectionUtil
举报原因:
原因补充:

(最多只允许输入30个字)