Android - 如何根据文件名获取 R.raw.value?

3

我有一个文件在res/raw文件夹中,名字叫做"book1tabs.txt",但是通常我不知道它的名字。然后我必须按照以下方式做:

InputStream in = this.mCtx.getResources().openRawResource(R.raw.book1tabs);

但我想使用字符串变量,例如:

String param = "book1tabs";

你能打开同一个输入流吗?

有没有办法做到这一点?

谢谢

2个回答

8
你可以像这样做:

您可以这样做

String param = "book1tabs";

InputStream in = this.mCtx.getResources().openRawResource(mCtx.getResources().getIdentifier(param,"raw", mCtx.getPackageName()));

getIdentifier() 方法将返回您传递的特定参数在 R.java 中的 ID。

它的具体操作如下:

  • 映射包名
  • 导航到您提供的 typeDef
  • 在 typeDef 中找到您提供的资源名称

更多信息请参考http://developer.android.com/reference/android/content/res/Resources.html


哇,那一行代码有点长啊...但是如果它能完成任务,太棒了。我会测试一下的。 - JDS

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名称。

我总是在我的所有项目中保留这个方法以便于快速访问。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接