Android - открытый ресурс из @drawable String - PullRequest
59 голосов
/ 28 февраля 2010

у меня есть:

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

Как я могу загрузить это в ImageView? this.setImageDrawable

Ответы [ 7 ]

170 голосов
/ 28 февраля 2010

Если вам действительно нужно работать со строкой, попробуйте что-то вроде этого:

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);
}

Иначе я бы порекомендовал вам поработать с R. * ссылки, подобные этой:

int imageResource = R.drawable.icon;
Drawable image = getResources().getDrawable(imageResource);
25 голосов
/ 28 февраля 2010

Во-первых, не делайте этого, так как синтаксис @drawable не имеет смысла в коде Java. Используйте int resourceId=R.drawable.myresource.

Если по какой-то причине вы свернули имя ресурса и вам нужен целочисленный идентификатор, используйте getIdentifier() для объекта Resources.

10 голосов
/ 25 декабря 2012

вы также можете добавить свою собственную переменную .. в моем случае scene.name между я следовал @pfleidi ответы. с обозначает контекст.

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

imageList.setImageResource(imageResource);
6 голосов
/ 28 сентября 2011

Давно пора, но мой любимый - использовать контекст:

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

где placeholder_image - это идентификатор ресурса. В вашем случае R.drawable.myresource.

Контекстом может быть деятельность или приложение. Практически везде, где вы находитесь, есть ссылка на контекст, который вы можете использовать, чтобы получить контекст приложения.

4 голосов
/ 26 октября 2014

На случай, если кто-нибудь еще столкнется с возникшей у меня проблемой, я загружал имя изображения из 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);
2 голосов
/ 11 октября 2018

Вы можете проверить здесь

int resID = mContext.getResources().getIdentifier(stringfilename, "drawable", mContext.getPackageName());
iv_imageview.setImageDrawable(ContextCompat.getDrawable(mContext,resID)); 

вы также можете получить изображение из mipmap, заменив «drawable» параметром «mipmap» метода getIdentifier ().

0 голосов
/ 12 марта 2016

У меня была такая же проблема с ... устаревшим и т. Д. И т. Д. Я решил так с минимальным 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;
...
...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...