12

drawable foder 中有很多图像,所以不是手动创建所有图像资源 id 的数组,我想动态获取数组中可绘制文件夹的所有图像。目前我正在使用此代码:

for(int i=1;i<=9;i++)
    {
            int imageKey = getResources().getIdentifier("img"+i, "drawable", getPackageName());
            ImageView image = new ImageView(this);  
            image.setId(imgId);
            image.setImageResource(imageKey);    
            image.setScaleType(ImageView.ScaleType.FIT_XY);
            viewFlipper.addView(image, new LayoutParams(LayoutParams.FILL_PARENT,              LayoutParams.FILL_PARENT));
            imgId++;
        }

但是在该代码中,我需要手动编辑图像名称以获取资源ID,但我想获取具有任何名称的所有图像..

4

2 回答 2

20

你可以使用Reflection来实现这一点。

导入Field

import java.lang.reflect.Field;

然后在你的代码中写这个

Field[] ID_Fields = R.drawable.class.getFields();
int[] resArray = new int[ID_Fields.length];
for(int i = 0; i < ID_Fields.length; i++) {
    try {
        resArray[i] = ID_Fields[i].getInt(null);
    } catch (IllegalArgumentException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

resArray[]现在包含对应用程序中所有可绘制对象的引用。

于 2012-09-05T05:50:08.320 回答
8

好吧,如果您的图像名称是 img1、img2 等,那么您可以创建一个变量,例如

String url = "drawable/"+"img"+i;

int imageKey = getResources().getIdentifier(url, "drawable", getPackageName());

你也可以用你的包名替换你的getPackageName()方法,比如“com.android.resource”
简单地说,一般的功能是

public int getIdentifier(String name, String defType, String defPackage)
于 2012-09-05T05:44:30.737 回答