如何在Android中以编程方式设置ImageViews源代码?

我正在制作一个需要一个Object(一个玩家)的复合UI元素,并且我想为这个玩家所玩的队伍select相应的图像(玩家对象有一个string值,用于图像号码。我的项目的文件夹。

我如何为每个玩家指定正确的来源? 这是一个写大量的if和elses(检查string值)和使用res.getDrawable(R.drawable.no1)等的情况,还是有一个更优雅的解决scheme,我可以用某种方式来指定一个string来指定源的path?

我把string和图像之间的关系放在一个Map中:

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

然后,你可以使用setImageResource(int)方法:

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

或者,如果string与图像名称相同(如前所述),则可以使用以下方法加载资源: Android并获取id为cast的视图

使用setImageResource(int)

如果我理解正确,你想显示一个string的图像资源。 我在一个应用程序中做到这一点,用户可以从自定义ListPreference中select一个图像,并显示在MainActivity布局中。 可绘制资源ID作为与可绘制资源ID(string)示例匹配的string存储在SharedPreferences中:“@ drawable / logo_image”。 我把ListPreference的值拉到:

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

这返回可绘制的资源作为一个stringie @ drawable / logo_image。 然后插入可绘制/图像到我的布局我使用:

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

这将使用由下面的方法返回的int将ImageView资源更改为新的可绘制的setImageResource(),该方法返回来自表示com.yourpackage中可绘制资源的string的ID(int):

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

您也可以使用相同的方法来更改使用drawable的其他资源,例如布局背景等。您只需使用此方法将ID作为int:

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