Подтвердить что ты не робот

Android - открыть ресурс из @drawable String

У меня есть:

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

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

4b9b3361

Ответ 1

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

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

Else Я бы порекомендовал вам работать с R. * такими вот ссылками:

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

Ответ 2

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

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

Ответ 3

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

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

imageList.setImageResource(imageResource);

Ответ 4

Долгое время просрочено, но моим фаворитом является использование Контекста:

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

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

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

Ответ 5

Если кто-то еще сталкивается с проблемой, которую я имел, я загружал имя изображения из 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);

Ответ 6

У меня была такая же проблема с... устаревшим и т.д. и т.д.  Я решил таким образом с минимальным 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;
...
...