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

时间:2011-03-14 02:06:36

标签: android

我正在创建一个复合ui元素,它接受一个Object(一个玩家),我想为这个玩家所玩的团队选择相应的图像(玩家对象的图像编号有一个字符串值。我有图像在我项目的资源文件夹中。

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

3 个答案:

答案 0 :(得分:93)

我将字符串和图像之间的关系放在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"));

或者,如果字符串的名称与图像的名称相同(如前面的情况),则可以使用以下方法加载资源:Android and getting a view with id cast as a string

答案 1 :(得分:33)

答案 2 :(得分:4)

如果我理解正确,您希望从字符串中显示图像资源。我在一个应用程序中这样做,用户可以从自定义ListPreference中选择一个图像,并在MainActivity布局中显示。可绘制资源ID作为与可绘制资源ID(String)示例匹配的字符串存储在SharedPreferences中:“@ drawable / logo_image”。我将ListPreference的值拉为:

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

这将可绘制资源作为字符串返回,即@ drawable / logo_image。然后将该drawable / image插入到我的布局中我使用:

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

这将使用setImageResource()将ImageView资源更改为新的drawable,使用下面方法返回的int,该方法从表示com.yourpackage中可绘制资源的字符串返回ID(int):

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

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

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