我有一个文件在res/raw文件夹中,名字叫做"book1tabs.txt",但是通常我不知道它的名字。然后我必须按照以下方式做:
InputStream in = this.mCtx.getResources().openRawResource(R.raw.book1tabs);
但我想使用字符串变量,例如:
String param = "book1tabs";
你能打开同一个输入流吗?
有没有办法做到这一点?
谢谢
您可以这样做
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
@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名称。
我总是在我的所有项目中保留这个方法以便于快速访问。