Android - 从@drawable String打开资源

nik*_*3ro 59 android

我有:

String uri = "@drawable/myresource.png";

如何在ImageView中加载?this.setImageDrawable?

小智 170

如果你真的需要使用字符串,请尝试这样的事情:

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);
}
Run Code Online (Sandbox Code Playgroud)

否则我建议你使用R.*这样的参考:

int imageResource = R.drawable.icon;
Drawable image = getResources().getDrawable(imageResource);
Run Code Online (Sandbox Code Playgroud)

  • 我正在从一些JSON加载图像名称,URI在开始时没有包含"drawable /"而我没有获得资源.在这种情况下,您可以将第二个参数设置为`getIdentifier()`为"drawable" (2认同)

Com*_*are 25

首先,不要这样做,因为该@drawable语法在Java代码中毫无意义.使用int resourceId=R.drawable.myresource.

如果由于某种原因你结束了资源名称并需要整数ID,请使用getIdentifier()Resources对象.

  • 谢谢,在你给我这个方法的名字后很容易找到这个页面 - > http://www.anddev.org/viewtopic.php?p=35661 (4认同)

Ali*_*mli 10

你也可以添加你自己的变量..在我的案例scene.name之间我跟着@pfleidi答案.c代表上下文.

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

imageList.setImageResource(imageResource);
Run Code Online (Sandbox Code Playgroud)


小智 6

早就应该了,但我最喜欢的是使用Context:

context.getApplicationContext().getResources().getDrawable(R.drawable.placeholder_image)
Run Code Online (Sandbox Code Playgroud)

其中placeholder_image是资源的id.在你的情况下,R.drawable.myresource.

上下文可以是活动或应用程序.无论您身在何处,都可以参考上下文,您可以使用它来获取应用程序的上下文.