Android 动态资源加载

Android 动态资源加载,android,Android,我试图找到一种方法来打开仅在运行时确定名称的资源 更具体地说,我希望有一个引用应用程序apk中的一组其他XML文件的XML。为了便于解释,假设主XML是main.XML,另一个XML是file1.XML、file2.XML和fileX.XML。我想要的是读取main.xml,提取我想要的xml的名称(fileX.xml),例如,然后读取fileX.xml。我面临的问题是,我从main.xml中提取的是一个字符串,我找不到方法将其更改为R.raw.nameoffile 有人有主意吗 我不想: 将

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

更具体地说,我希望有一个引用应用程序apk中的一组其他XML文件的XML。为了便于解释,假设主XML是
main.XML
,另一个XML是
file1.XML
file2.XML
fileX.XML
。我想要的是读取
main.xml
,提取我想要的xml的名称(
fileX.xml
),例如,然后读取
fileX.xml
。我面临的问题是,我从
main.xml
中提取的是一个字符串,我找不到方法将其更改为
R.raw.nameoffile

有人有主意吗

我不想:

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

我没有将其用于原始文件或xml布局文件,但对于可绘制文件,我使用以下方法:

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

获取资源的标识符(R.id)。您需要用其他东西替换drawable,可能是
raw
layout
(未经测试)。

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

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);
    }
}

还有另一种方法:

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

据了解,它比使用getIdentifier快5倍。

非常有用,谢谢,但我们永远不会想要字符串。有时候一条小溪会更好。谢谢你的回答,效果很好。对于相同情况下的函数(一旦我知道了函数名,它就很简单):
getResources().getIdentifier(“fileX”,“raw”,application package)死链接@JasonRogers啊,nvm-这应该不是死链接casperOne删除了我的帖子,并在没有花时间正确操作的情况下将其更改为评论(也称为断链接)下面是链接:get_resources_by_name_uGetIdentifier-t460.htmli面临类似的问题,但我没有得到任何公认的答案。有人能就这个问题开始悬赏吗?