Android-如何通过文件名称,获得资源的id?

发布于 2017-01-03 09:14:29 字数 96 浏览 1247 评论 5

在res/drawable下面有多个图片,在代码中,我想通过文件名称(这个名称是从服务器请求过来的)获得资源Id,然后再通过id获得这个图片,显示出来。不知道是否可行?如何实现?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

浮生未歇 2017-09-06 13:13:53

我这个方法在项目中用过,可以。

public static Drawable getDrawableByPicName(String picName, Context context) {
int id = context.getResources().getIdentifier(
picName == null ? "no_picture" : picName, "drawable",
GlobalConst.PACKAGE_NAME);
Drawable image = null;
if (id <= 0) {
image = context.getResources().getDrawable(R.drawable.no_picture);
} else {
image = context.getResources().getDrawable(id);
}
return image;
}

虐人心 2017-08-11 02:35:07

可以自己写一个类把这图片名字跟图片id组合起来啊

浮生未歇 2017-06-27 01:02:17

可以使用反射,我写了一个小例子。

public static void main() throws SecurityException, NoSuchFieldException,
IllegalArgumentException, IllegalAccessException,
ClassNotFoundException
{
String resourceName = "R.drawable.icon";
String packageName = "com.bbcode";
int resourceId = getResourceId(packageName, resourceName);
if(R.drawable.icon == resourceId){
//success
;
}
}

public static int getResourceId(String packageName, String resourceName)
throws SecurityException, NoSuchFieldException,
IllegalArgumentException, IllegalAccessException,
ClassNotFoundException
{
String[] splitStr = resourceName.split("\.");
String classStr = splitStr[0] + "$" + splitStr[1];
Class c = Class.forName(packageName + "." + classStr);
Field f = c.getDeclaredField(splitStr[2]);
return f.getInt(f.getName());
}

虐人心 2017-06-13 17:32:35

你是想从服务器获得名称,然后用R.drawable.+名称组合起来?
不可以,应为R.drawable在编译的时候已经转成int了,
如果你想替换的是drawable下的图片,而替换哪一张则又服务器觉得的话,建议你从服务器传一个标识过来就可以了,然后在程序里写个switch判断一下,就可以动态更换drawable的图片了

偏爱自由 2017-02-19 16:15:43

何必多此一举。放到 res/assets 下

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文