135

如果我知道图像的名称(在 Android 中),如何获取图像的资源 ID?

4

5 回答 5

271

像这样:

String mDrawableName = "myappicon";
int resID = getResources().getIdentifier(mDrawableName , "drawable", getPackageName());
于 2010-06-15T09:46:40.173 回答
30

你也可以试试这个:

try {
    Class res = R.drawable.class;
    Field field = res.getField("drawableName");
    int drawableId = field.getInt(null);
}
catch (Exception e) {
    Log.e("MyTag", "Failure to get drawable id.", e);
}

我已经从下面的 URL 复制了这个源代码。根据在此页面中完成的测试,它比 getIdentifier() 快 5 倍。我还发现它更方便易用。希望它也能帮助你。

链接: 在 Android 中动态检索资源

于 2011-12-26T17:16:39.090 回答
11

公共系统资源的示例:

// this will get id for android.R.drawable.ic_dialog_alert
int id = Resources.getSystem().getIdentifier("ic_dialog_alert", "drawable", "android");

警报

另一种方法是参考android.R.drawable类的文档。

于 2014-05-31T06:47:04.547 回答
10

您可以使用此函数获取资源 ID:

public static int getResourseId(Context context, String pVariableName, String pResourcename, String pPackageName) throws RuntimeException {
    try {
        return context.getResources().getIdentifier(pVariableName, pResourcename, pPackageName);
    } catch (Exception e) {
        throw new RuntimeException("Error getting Resource ID.", e)
    } 
}


所以如果你想得到一个Drawable Resource ID,你可以这样调用方法:

getResourseId(MyActivity.this, "myIcon", "drawable", getPackageName());

(或来自片段):

getResourseId(getActivity(), "myIcon", "drawable", getActivity().getPackageName());


对于字符串资源 ID,您可以这样称呼它:

getResourseId(getActivity(), "myAppName", "string", getActivity().getPackageName());

ETC...


小心:如果找不到资源 ID,它会抛出 RuntimeException。确保在生产中正确恢复。

读这个

于 2013-09-30T11:49:21.607 回答
0

我遇到的另一种情况。

String imageName ="Hello" 然后当它作为第一个参数传递给 getIdentifier 函数时,它将以字符串 null 终止传递名称,并且始终返回零。传递这个 imageName.substring(0, imageName.length()-1)

于 2017-06-16T05:13:50.573 回答