通过字符串获取drawable

时间:2014-03-26 14:59:35

标签: android android-resources android-drawable

我通过json解析图像名称,现在用于显示我必须通过图像名称获取可绘制ID,以便我可以这样做:

background.setBackgroundResource(R.drawable.eventimage1);

当我得到图像名称时,格式如下:

image_ev1.png

4 个答案:

答案 0 :(得分:21)

使用此功能可在获得图像名称时获取可绘制的内容。请注意,图像名称不包含文件扩展名。

public static Drawable GetImage(Context c, String ImageName) {
        return c.getResources().getDrawable(c.getResources().getIdentifier(ImageName, "drawable", c.getPackageName()));
}

然后只使用setBackgroundDrawable方法。

如果您只想要ID,请忽略getDrawable部分 即。

return c.getResources().getIdentifier(ImageName, "drawable", c.getPackageName());

答案 1 :(得分:1)

将此方法添加到您的代码中:

protected final static int getResourceID
(final String resName, final String resType, final Context ctx)
{
    final int ResourceID =
        ctx.getResources().getIdentifier(resName, resType,
            ctx.getApplicationInfo().packageName);
    if (ResourceID == 0)
    {
        throw new IllegalArgumentException
        (
            "No resource string found with name " + resName
        );
    }
    else
    {
        return ResourceID;
    }
}

然后检索你的图像:

Context ctx = getApplicationContext();
background.setBackgroundResource(getResourceID("image_ev1", "drawable", ctx)));

答案 2 :(得分:1)

这会为您提供图片ID

    int resId = getResources().
getIdentifier(your_image_name.split("\\.")[0], "drawable", getApplicationInfo().packageName);   

如果你之后需要一个drawable:

getResources().getDrawable(resId)

答案 3 :(得分:1)

对于Kotlin程序员(API 22中的ContextCompat):

 var res = context?.let { ContextCompat.getDrawable(it,resources.getIdentifier("your_resource_name_string", "drawable", context?.getPackageName())) }

您还可以使用例如如果资源位于其他位置,则使用“ mipmap”而不是“ drawable”。