我在res / raw文件夹中有一个名为“book1tabs.txt”的文件,但总的来说我不知道它叫什么。然后我必须做以下事情:
InputStream in = this.mCtx.getResources().openRawResource(R.raw.book1tabs);
但我想使用字符串变量,比如
String param = "book1tabs";
并且能够打开相同的输入流。
有没有办法做到这一点?
由于
答案 0 :(得分:6)
你可以做这样的事情
String param = "book1tabs";
InputStream in = this.mCtx.getResources().openRawResource(mCtx.getResources().getIdentifier(param,"raw", mCtx.getPackageName()));
getIdentifier()
将返回您传递的特定参数R.java
的ID。
它究竟会做什么如下
了解更多信息http://developer.android.com/reference/android/content/res/Resources.html
答案 1 :(得分:2)
我发现这种方法对于通过字符串名称提取各种资源非常有用......
@SuppressWarnings("rawtypes")
public static int getResourceId(String name, Class resType){
try {
Class res = null;
if(resType == R.drawable.class)
res = R.drawable.class;
if(resType == R.id.class)
res = R.id.class;
if(resType == R.string.class)
res = R.string.class;
if(resType == R.raw.class)
res = R.raw.class;
Field field = res.getField(name);
int retId = field.getInt(null);
return retId;
}
catch (Exception e) {
// Log.d(TAG, "Failure to get drawable id.", e);
}
return 0;
}
这将返回数字id(假设存在这样的资源)。对于R.drawable
中的类传递和字符串,无论基于xml的ID名称是什么。
我总是把这个方法挂在我的所有项目上以便于访问。