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

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

甜柠檬 发布于 2017-01-03 字数 169 浏览 1163 回复 5

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

如果你对这篇文章有疑问,欢迎到本站 社区 发帖提问或使用手Q扫描下方二维码加群参与讨论,获取更多帮助。

扫码加入群聊

发布评论

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

评论(5

浮生未歇 2017-09-06 5 楼

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

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 4 楼

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

浮生未歇 2017-06-27 3 楼

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

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 2 楼

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

偏爱自由 2017-02-19 1 楼

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