如何在Android中以编程方式设置ImageView的来源?

53

我正在制作一个复合UI元素,该元素接受一个对象(玩家),我想为该玩家所在的球队选择相应的图像(该玩家对象具有其图像编号的字符串值)。 我在项目的资源文件夹中拥有这些图像。

如何为每个玩家指定正确的图像源?是写一大堆if和else语句(检查字符串值)并使用res.getDrawable(R.drawable.no1)等方法,还是有更优雅的解决方案,在某种程度上可以使用字符串指定源路径呢?

3个回答

95

我会将字符串和图像之间的关系放在一个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


真糟糕,比我快了26秒 :) - Mohit Deshpande
1
@MohitDeshpande:哈哈哈哈哈,这种事情经常发生。 - Cristian
1
没错,这很好用。我忘了 R.etc 返回整数 :/ 谢谢! - blackaardvark

34

5

如果我理解正确,您想从字符串中显示图像资源。在我的一个应用程序中,用户可以从自定义的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。然后,我使用以下代码将该可绘制对象/图片插入到我的布局中:

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

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

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

您可以使用相同的方法更改使用drawable的其他资源,例如布局背景等。您只需要使用此方法将ID作为int获取即可:
    getResources().getIdentifier("Resource Id String", "drawable", "com.yourpackage") 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接