动态资源加载Android

时间:2010-09-06 04:05:04

标签: android

我正在尝试找到一种方法来打开名称仅在运行时确定的资源。

更具体地说,我希望有一个XML引用应用程序apk中的一堆其他XML文件。出于解释的目的,假设主XML是main.xml而其他XML是file1.xmlfile2.xmlfileX.xml。我想要的是阅读main.xml,例如,提取我想要的XML的名称(fileX.xml),然后阅读fileX.xml。我面临的问题是我从main.xml提取的内容是一个字符串,我无法找到将其更改为R.raw.nameOfTheFile的方法。

有人有想法吗?

我不想:

  • 将所有内容重新组合在一个巨大的XML文件中
  • 在一个巨大的交换机案例中硬编码main.xml,将数字/字符串链接到资源ID

3 个答案:

答案 0 :(得分:54)

我没有将它用于原始文件或xml布局文件,但对于drawables我使用它:

getResources().getIdentifier("fileX", "drawable","com.yourapppackage.www");

获取资源的标识符(R.id)。您需要将drawable替换为其他内容,可能是rawlayout(未经测试)。

答案 1 :(得分:23)

我写了这个方便的小助手方法来封装它:

public static String getResourceString(String name, Context context) {
    int nameResourceID = context.getResources().getIdentifier(name, "string", context.getApplicationInfo().packageName);
    if (nameResourceID == 0) {
        throw new IllegalArgumentException("No resource string found with name " + name);
    } else {
        return context.getString(nameResourceID);
    }
}

答案 2 :(得分:7)

还有另一种方法:

int drawableId = R.drawable.class.getField("file1").getInt(null);

根据this blog,它比使用getIdentifier快5倍。