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; ... ...