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】

反射工具类【ReflectionUtils】
  • adsl624153
  • adsl624153
  • 2017年05月05日 00:45
  • 1630

【JAVA】反射工具类

JAVA反射工具类:提供以下几个功能: 1. 取最简类名 2. 动态赋值 3. 动态取值 4. 判断是否普通类型(自定义成员变量) 5. 动态取指定类的所有属性名...
  • u011704894
  • u011704894
  • 2016年01月20日 15:47
  • 963

android开发使用的工具类

github地址:https://github.com/ddwhan0123/Lazy AS Grade可以直接: compile 'com.github.lazylibrary:lazylibra...
  • zhangli_
  • zhangli_
  • 2016年03月04日 15:45
  • 2650

Android之反射的使用

知识点: 1、反射的概念; 2、反射API介绍; 3、反射在Android的使用实例; Android开发中,我们也许用到的反射并不常见,或者说几乎没有用到,因为我们都是被一般的面向对象思...
  • qq_16628781
  • qq_16628781
  • 2017年03月08日 10:51
  • 135

Android中java反射(Reflection)实战

反射作为java语言非常重要的特性之一,在开发的过程中可以为我们提供极大的便利。在J2EE中,java反射得到了大量的应用,尤其是在一些主流框架中,如Spring中反射就发挥了极大的作用。那将java...
  • licaomengRICE
  • licaomengRICE
  • 2015年08月08日 18:16
  • 6189

Java的反射(Reflection)、内省(Retrospector)和beanUtils工具

反射(Reflection):加载类,并解剖出类的各个组成部分(反射就是解剖的意思) 加载类,获得类的字节码(三种方式): Class clazz1 = Class.forName("cn....
  • ClementAD
  • ClementAD
  • 2016年02月04日 15:59
  • 2445

Android开发几种常用工具类

本人只是简单列举几种常用工具类,如果各位看客有更好的,请留下你们的足迹共同分享,在此先谢谢了! AppUtil工具类: import java.io.File; import java.util.Ar...
  • dimudan2015
  • dimudan2015
  • 2017年05月04日 09:54
  • 1334

Android开发常用的工具类

工具 描述 AnimationUtils 动画工具类 AppUtils APP相关信息工具类 AssetDatabaseOpenHelper 目录资源获取...
  • u010889616
  • u010889616
  • 2017年02月19日 09:19
  • 775

学习Android利用反射获取资源文件

公司需要开发一款SDK,代码部分要做成jar文件,那么R文件就没办法引用啦。再也没办法愉快的使用findviewbyid(R.id.XX);获取控件了。去google了一下,发现大神们都可以用反射拿到...
  • StrangeNightmare
  • StrangeNightmare
  • 2016年09月29日 18:36
  • 2084

Android中类的反射的两个应用示例

类反射的两个实际应用示例:放射类对象和获取Android中资源文件的ID。
  • wenzhi20102321
  • wenzhi20102321
  • 2016年12月06日 11:35
  • 986
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:38. Android 反射资源工具ReflectionUtil
举报原因:
原因补充:

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