我正在尝试找到一种方法来打开名称仅在运行时确定的资源。
更具体地说,我希望有一个XML引用应用程序apk中的一堆其他XML文件。出于解释的目的,假设主XML是main.xml
而其他XML是file1.xml
,file2.xml
和fileX.xml
。我想要的是阅读main.xml
,例如,提取我想要的XML的名称(fileX.xml
),然后阅读fileX.xml
。我面临的问题是我从main.xml
提取的内容是一个字符串,我无法找到将其更改为R.raw.nameOfTheFile
的方法。
有人有想法吗?
我不想:
答案 0 :(得分:54)
我没有将它用于原始文件或xml布局文件,但对于drawables我使用它:
getResources().getIdentifier("fileX", "drawable","com.yourapppackage.www");
获取资源的标识符(R.id)。您需要将drawable替换为其他内容,可能是raw
或layout
(未经测试)。
答案 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倍。