zoukankan      html  css  js  c++  java
  • Android根据字符串型的资源名获取对应资源id

    有时候我们想动态的根据一个字符串资源名获得到对应的资源id,如根据不同的图片名称获得对应的图片,此时就应该考虑如何实现.

    大家知道,在编译Android工程时,系统会自动生成一个静态资源类R,里面根据不同的资源类型有不同的静态内部类,如id,drawable等等,而每个内部类中存放的是对应的16进制的静态资源id属性,而这些属性的属性名就是资源名.常用的方法有两个:

    方法一:

    利用getResources().getIdentifier(String name,String defType,String defPackage) 获取

    public int  getResource(String imageName){
         Context ctx=getBaseContext();
         int resId = getResources().getIdentifier(imageName, "mipmap", ctx.getPackageName());
         //如果没有在"mipmap"下找到imageName,将会返回0
         return resId;
    }

    方法二:

    使用反射机制获取

    public int  getResource(String imageName){
        Class mipmap = R.mipmap.class;
        try {
            Field field = mipmap.getField(imageName);
            int resId = field.getInt(imageName);
            return resId;
        } catch (NoSuchFieldException e) {//如果没有在"mipmap"下找到imageName,将会返回0
            return 0;
        } catch (IllegalAccessException e) {
            return 0;
        }
    
    }

    PS:根据资源id获取资源名称:

    String resName = getResources().getResourceName(resId);

    作者:caobotao
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利。
  • 相关阅读:
    ICommand接口
    Binding自动侦听
    WPF比较两个随机数大小写,利用MVVM思想实现
    从一个ListBox中的元素点击导入另一个ListBox元素中
    利用FluidMoveBehavior制作出手机通讯录平滑的效果
    从零开始学习Gradle之三---多项目构建
    用Gradle 构建你的android程序
    iPhone/iPad调整事件递交
    iOS8-Sampler
    iOS8-Sampler
  • 原文地址:https://www.cnblogs.com/caobotao/p/5041713.html
Copyright © 2011-2022 走看看