Android - 如何动态加载drawables(图片)?名称直到运行时才知道

时间:2011-07-21 13:11:08

标签: android

我多次搜索Google和此网站,但找不到我的问题的解决方案。

首先,我了解到,您可以使用以下内容加载图像:

int image = R.drawable.icon; (assuming there's a file called 'icon.png')

我读到了,并尝试使用:

getResources().getIdentifier("resname", "restype", com.example.whatever);

但是,这是我无法做到的: 我希望能够在/ res / drawable文件夹中显示图片(我相信这是正确的文件夹),不知道文件的任何名称,并在运行时动态加载它们。

我尝试过的一件事(很多)是(等等):

int[] images = new int[numberOfImages];
for( 0 to numberOfImages )
{
    images[i] = 
        getResources().getIdentifier("resname", "restype", com.example.whatever);
}

每次都会返回0,所以它无法正常工作

我想获取/ res / drawables文件夹中每张图片的名称和整数标识符。这可以在不知道任何文件名的情况下完成吗?

----------------------------------------------- -----------------------

[在问题解决后添加此内容以帮助将来可能遇到同一问题的任何人。它只是表明它确实有效。]

    Class resources = R.drawable.class;
    Field[] fields = resources.getFields();
    String[] imageName = new String[fields.length];     
    int index = 0;
    for( Field field : fields )
    {
        imageName[index] = field.getName();
        index++;
    }

    int result = 
            getResources().getIdentifier(imageName[10], "drawable", "com.example.name");

2 个答案:

答案 0 :(得分:2)

好吧,如果你必须这样做,请使用反射:)

Class resources = R.drawable.class;
Field[] fields = resources.getFields();
for (Field field : fields) {
    System.out.println(field.getName());
}

然而,在某种程度上,你仍然是硬编码的东西,因为你只会在你的应用程序中放置一组固定的drawable。 :)

答案 1 :(得分:1)

正如您在评论中所述,如果您想在安装应用程序后将文件添加到该文件夹​​,则必须使用私人文件夹。 Data storage documentation

然后使用服务下载图像并将其添加到私人文件夹。

如果您希望用户使用一些预加载的图像下载应用程序并且您不想等待服务运行时间下载初始图像集,您始终可以在{{1}中发送一些图像文件夹,并在您的应用程序第一次运行时,将这些文件复制到您的私人文件夹。