安卓如何通过变量获取资源id


    为了灵活显示图片,往往会通过设置一些变量来实现,而字符串是比较经常被使用到的

    下面介绍2种通过字符串显示图片的方法

    1. 使用Resources 类的 getIdentifier方法
       Resources res=getResources();
       return res.getIdentifier(type,"drawable",getPackageName());//这里type代表变量名称,getPackageName()替换为你的R资源文件所在的包名

   getResources方法是来自于contenxt(也就是Activity类),它直接可以返回一个Resouces对象。而Resouces的getIdentifier方法可以返回R.java中的任何资源id,当然,你必须指定3个参数:字段名,类名,包名。包名指定了的 全限定名的包名部分,如果R 的全限定名为 android.R 或者 com.company.R,则包名在这里就是“android”或“com.company”。getPackageName其实是this.getPackageName(),它直接返回本类的包名。

类名则是资源所属的类。比如我们知道的,在R.java 类中的几个固定的类:drawable、id、string、layout等,在它们下边又定义了许多资源id。

字段名则是资源id的名字。比如这个资源id定义: public static final int del=0x7f020002;

del就是一个资源id的名字,0x7f020002则是它的16进制值。

通过3个参数,getIdentifier 方法就可以通过比较动态的方式获得资源id。
    2. 通过反射来获取
       try{

  Field field=R.drawable.class.getField(type);//变量名称

  int i= field.getInt(new R.drawable());

  Log.d(tag,i+"");

  return i;

}catch(Exception e){
  Log.e(tag,e.toString());
  return R.drawable.unknow;
}

你可能感兴趣的:(安卓)