Android – 从@drawablestring打开资源

我有:

 String uri =“@ drawable / myresource.png”;

我怎样才能在ImageView中加载? this.setImageDrawable?

如果你真的需要使用string,请尝试如下所示:

private void showImage() { String uri = "drawable/icon"; // int imageResource = R.drawable.icon; int imageResource = getResources().getIdentifier(uri, null, getPackageName()); ImageView imageView = (ImageView) findViewById(R.id.myImageView); Drawable image = getResources().getDrawable(imageResource); imageView.setImageDrawable(image); } 

否则,我会build议你使用R *参考这样的:

 int imageResource = R.drawable.icon; Drawable image = getResources().getDrawable(imageResource); 

首先,不要这样做,因为在Java代码中, @drawable语法是没有意义的。 使用int resourceId=R.drawable.myresource

如果由于某种原因,您确实需要资源名称并需要整数ID,请使用Resources对象上的getIdentifier()

你也可以添加你自己的variables..在我的情况下scene.name之间我跟@pfleidi答案。 c代表上下文。

 String uri = "drawable/" + scene.name; int imageResource = c.getResources().getIdentifier(uri, null, c.getPackageName()); imageList.setImageResource(imageResource); 

早已逾期,但我最喜欢的是使用上下文:

 context.getApplicationContext().getResources().getDrawable(R.drawable.placeholder_image) 

placeholder_image是资源的ID。 在你的情况下, R.drawable.myresource

上下文可以是一个活动或应用程序。 无论您身在何处,都可以引用上下文,您可以使用该上下文来获取应用程序的上下文。

万一有其他人遇到我遇到的问题,我从JSON加载图像名称,然后需要获得标识符。 getIdentifier的第二个参数可以设置为“drawable”。 这是@ alia-ramli-ramli答案的细微变化…

 String uri = details.getString("circle").toLowerCase(); int imageResource = context.getResources().getIdentifier(uri, "drawable", context.getPackageName()); Drawable image = context.getResources().getDrawable(imageResource); viewHolder.unit_circle.setImageDrawable(image); 

我有同样的问题…不赞成等。我用这样的方式解决了最低的API 14好吧。

 ... ... ImageView imgPoster = viewCache.getImgPoster(resource); String uri = "drawable/" + film.getPoster(); int imageResource = context.getResources().getIdentifier(uri, null, context.getPackageName()); Drawable image = ContextCompat.getDrawable(context, imageResource); imgPoster.setImageDrawable(image); return convertView; ... ...