【问题标题】:dynamically getting all image resource id in an array动态获取数组中的所有图像资源ID
【发布时间】:2018-06-07 00:27:17
【问题描述】:

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,但我想获取具有任何名称的所有图像..

【问题讨论】:

    标签: android


    【解决方案1】:

    您可以使用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[] 现在包含对您应用程序中所有可绘制对象的引用。

    【讨论】:

    • 非常感谢兄弟...它现在可以正常工作,但它也会获取应用程序的图标.. 有什么解决方法吗?
    • 它只是获取所有包含图标的可绘制 ID。您将不得不找到一种方法将其排除在您的逻辑(迭代器/循环)中。
    • 只在遍历列表时排除它们
    • getName() 你可以获得所有资源属性名称。谢谢
    【解决方案2】:

    好吧,如果你的图片名称是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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-25
      • 1970-01-01
      相关资源
      最近更新 更多