以编程方式从Android获取R文件中的所有图像

时间:2015-06-02 07:02:12

标签: java android android-layout reflection android-resources

我想知道是否有办法迭代资源文件以获取程序的所有图像并将它们推入数组?

如果是这样,最简单的方法是什么?最简单的方法是什么?

2 个答案:

答案 0 :(得分:1)

您可以使用 java中的反射来实现此目的。

如果您已经不熟悉,这里是一个很好的起点 programmcreek.com

http://www.programcreek.com/2013/09/java-reflection-tutorial/

简单地说,作为示例,您可以使用此示例代码在代码中迭代R:

import java.lang.reflect.Field;

import android.util.Log;

public class ResourceUtil {

/**
 * Finds the resource ID for the current application's resources.
 * @param Rclass Resource class to find resource in. 
 * Example: R.string.class, R.layout.class, R.drawable.class
 * @param name Name of the resource to search for.
 * @return The id of the resource or -1 if not found.
 */
public static int getResourceByName(Class<?> Rclass, String name) {
    int id = -1;
    try {
        if (Rclass != null) {
            final Field field = Rclass.getField(name);
            if (field != null)
                id = field.getInt(null);
        }
    } catch (final Exception e) {
        Log.e("GET_RESOURCE_BY_NAME: ", e.toString());
        e.printStackTrace();
    }
    return id;
}

另外,您可以参考这些问题以获得更多见解: Android: Programatically iterate through Resource ids

答案 1 :(得分:0)

  1. 导入Field class

    import java.lang.reflect.Field;

  2. 在您的代码中写下

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

    resourcesArray将所有资源文件都包含在内。