我正在制作一个复合UI元素,该元素接受一个对象(玩家),我想为该玩家所在的球队选择相应的图像(该玩家对象具有其图像编号的字符串值)。 我在项目的资源文件夹中拥有这些图像。
如何为每个玩家指定正确的图像源?是写一大堆if和else语句(检查字符串值)并使用res.getDrawable(R.drawable.no1)等方法,还是有更优雅的解决方案,在某种程度上可以使用字符串指定源路径呢?
我正在制作一个复合UI元素,该元素接受一个对象(玩家),我想为该玩家所在的球队选择相应的图像(该玩家对象具有其图像编号的字符串值)。 我在项目的资源文件夹中拥有这些图像。
如何为每个玩家指定正确的图像源?是写一大堆if和else语句(检查字符串值)并使用res.getDrawable(R.drawable.no1)等方法,还是有更优雅的解决方案,在某种程度上可以使用字符串指定源路径呢?
我会将字符串和图像之间的关系放在一个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
如果我理解正确,您想从字符串中显示图像资源。在我的一个应用程序中,用户可以从自定义的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")
getResources().getIdentifier("Resource Id String", "drawable", "com.yourpackage")