【发布时间】:2011-03-03 20:18:29
【问题描述】:
如果我知道图片的名称(在 Android 中),如何获取图片的资源 ID?
【问题讨论】:
-
如果您想使用 kotlin,请参阅:stackoverflow.com/a/52568692/1631967
标签: android android-image android-resources
如果我知道图片的名称(在 Android 中),如何获取图片的资源 ID?
【问题讨论】:
标签: android android-image android-resources
这样的:
String mDrawableName = "myappicon";
int resID = getResources().getIdentifier(mDrawableName , "drawable", getPackageName());
【讨论】:
getResources().getIdentifier(name, "id", getPackageName()); 来获取 ImageButton 的 ID(就像使用 R.id.name 一样)。
name 中到底有什么?我想找到一个我知道其引用的按钮的 ID,在我的例子中是 button1
getResource() 和 getPackageName() 显示错误。 cannot resolve method
getResource() 和 getPackageName() 是来自 Activity 的方法。
你也可以试试这个:
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 倍。我还发现它更方便易用。希望对你也有帮助。
【讨论】:
公共系统资源示例:
// this will get id for android.R.drawable.ic_dialog_alert
int id = Resources.getSystem().getIdentifier("ic_dialog_alert", "drawable", "android");
另一种方法是参考android.R.drawable 类的文档。
【讨论】:
您可以使用此函数获取资源 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资源ID,你可以这样调用方法:
getResourseId(MyActivity.this, "myIcon", "drawable", getPackageName());
(或来自片段):
getResourseId(getActivity(), "myIcon", "drawable", getActivity().getPackageName());
对于 String 资源 ID,您可以这样称呼它:
getResourseId(getActivity(), "myAppName", "string", getActivity().getPackageName());
等等……
小心:如果找不到资源 ID,则会抛出 RuntimeException。确保在生产中正确恢复。
【讨论】:
static,否则getResources() 将不起作用。
Context 不可用。修复方法是删除static 并将其移动到Context(例如Activity 或Application);或者替代修复是乔纳森在他的编辑中所做的,即将Context 传递给方法。
我遇到的另一种情况。
字符串图像名称 =“你好” 然后当它被传递到 getIdentifier 函数作为第一个参数,它将以字符串 null 终止传递名称,并且始终返回零。 通过这个 imageName.substring(0, imageName.length()-1)
【讨论】: