Как установить источник ImageViews программно в Android? [дубликат]


этот вопрос уже есть ответ здесь:

  • Изменить изображение ImageView программно в Android 7 ответов
  • Как я могу изменить изображение ImageView? [дубликат] 4 ответы

Я делаю составной пользовательский интерфейс элемент, который принимает объект(игрок), и я хочу выбрать соответствующее изображение для команды, за которую играет этот игрок (объект игрока имеет строковое значение для его номера изображения. У меня есть изображения в папке ресурсов моего проекта.

Как указать правильный источник для каждого игрока. Это случай написания огромного количества if и elses (проверка строкового значения) и использование res. getDrawable (R. drawable.no1) и т. д. Или есть более элегантное решение, где я могу использовать строку каким-то образом указать путь к источнику?

3 51

3 ответа:

Я бы поставил связь между строками и изображениями на карте:

Map<String, Integer> map = new HashMap<String, Integer>();
map.put("blah", R.drawable.blah);
// etc...

тогда вы можете использовать setImageResource(int) способ:

ImageView image;
image.setImageResource(map.get("blah"));

или, если строки имеют то же имя, что и изображение (как и в предыдущем случае), вы можете загрузить ресурс с помощью этого метода: Android и получение представления с идентификатором в виде строки

использовать setImageResource(int)

если я правильно понимаю, вы хотите отобразить ресурс изображения из строки. Я делаю это в приложении, где пользователь может выбрать изображение из пользовательского ListPreference, и оно отображается в макете MainActivity. Идентификатор ресурса drawable хранится в SharedPreferences в виде строки, которая соответствует примеру идентификатора ресурса drawable (String): "@drawable/logo_image". Я тяну значение ListPreference с:

    SharedPreferences shared = getSharedPreferences("com.joshuariddle.recoveryworkscounter.settings", MODE_PRIVATE);
            String logo_id = (shared.getString("pref_logo",""));

это возвращает drawable ресурс в виде строки т. е. @drawable / logo_image. Затем, чтобы вставить этот drawable / image в мой макет, я использую:

    ImageView iv_logo = (ImageView) findViewById(R.id.imgLogo);
    iv_logo.setImageResource(getResources().getIdentifier(logo_id, "drawable", "com.yourpackage"));

это изменит ресурс ImageView на новый drawable с setImageResource (), используя int, возвращенный методом ниже, который возвращает идентификатор (int) из строки, представляющей drawable ресурс в com.yourpackage:

    getResources().getIdentifier(logo_id, "drawable", "com.yourpackage")

вы также можете использовать этот же метод для изменения других ресурсов, которые используют мешочки, таких как фоны макет и т. д. Вы просто должны использовать этот метод чтобы получить идентификатор в виде int:

    getResources().getIdentifier("Resource Id String", "drawable", "com.yourpackage")