Android 动态资源加载
我试图找到一种方法来打开仅在运行时确定名称的资源 更具体地说,我希望有一个引用应用程序apk中的一组其他XML文件的XML。为了便于解释,假设主XML是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 有人有主意吗 我不想: 将
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
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面临类似的问题,但我没有得到任何公认的答案。有人能就这个问题开始悬赏吗?