如何从Andriod中的String获取资源ID

时间:2017-08-20 23:47:40

标签: android

我需要从resource ID

获得string
String s = "R.raw.button5";

final MediaPlayer mp2 = MediaPlayer.create(this,Integer.valueOf((s));

2 个答案:

答案 0 :(得分:1)

您可以使用getIdentifier(....)。如果你有id为“R.id.button5”的按钮,那么这就是你的代码。

int id = getResources().getIdentifier("button5", "id", context.getPackageName());
final MediaPlayer mp2 = MediaPlayer.create(this,id);

答案 1 :(得分:0)

您可以使用getIdentifier()从资源名称获取资源ID:

  

则getIdentifier

     

int getIdentifier(String name,
                    字符串defType,
                  字符串defPackage)

     

返回给定资源名称的资源标识符。完全   限定资源名称的格式为“package:type / entry”。首先   如果defType和,则两个组件(包和类型)是可选的   defPackage分别在这里指定。

     

注意:不鼓励使用此功能。效率更高   按标识符而不是按名称检索资源。

要获取资源原始ID,您可以使用以下内容:

Context context = getContext(); // base context or application context
int resId = getResources().getIdentifier("button5", "raw", 
                                  context.getPackageName());

// Or
int resId = getResources().getIdentifier("raw/button5", null,
                                  context.getPackageName());

但是您需要记住,正如文档中的说明所示,您最好使用预生成的资源ID而不是从资源名称获取。这是因为getIdentifier()需要时间来找到匹配的资源名称,如下面的代码所示(来自Resources):

public int getIdentifier(String name, String defType, String defPackage) {
    if (name == null) {
        throw new NullPointerException("name is null");
    }
    try {
        return Integer.parseInt(name);
    } catch (Exception e) {
        // Ignore
    }
    return mAssets.getResourceIdentifier(name, defType, defPackage);
}

另一个原因是,使用R.raw.button5对资源名称进行硬编码是一项维护噩梦。因为您将来可能会更改名称,所以最终会找到指向无处的资源名称。