我正在制作一个复合ui元素,它接受一个Object(一个玩家),我想为这个玩家所玩的团队选择相应的图像(玩家对象的图像编号有一个字符串值.我在资源中有图像我项目的文件夹.
如何为每个玩家指定正确的来源.是编写大量的if和elses(检查字符串值)和使用res.getDrawable(R.drawable.no1)等的情况,还是有一个更优雅的解决方案,我可以用某种方式指定字符串来指定通往源头的路径?
Cri*_*ian 94
我将字符串和图像之间的关系放在Map中:
Map<String, Integer> map = new HashMap<String, Integer>();
map.put("blah", R.drawable.blah);
// etc...
Run Code Online (Sandbox Code Playgroud)
然后,您可以使用以下setImageResource(int)
方法:
ImageView image;
image.setImageResource(map.get("blah"));
Run Code Online (Sandbox Code Playgroud)
或者,如果字符串与图像具有相同的名称(如前面的情况),则可以使用以下方法加载资源:Android并获取具有id强制转换为字符串的视图
如果我理解正确,您想从字符串中显示图像资源。我在一个应用程序中这样做,用户可以从自定义 ListPreference 中选择一个图像,并显示在 MainActivity 布局中。可绘制资源 ID 作为与可绘制资源 ID(字符串)示例匹配的字符串存储在 SharedPreferences 中:“@drawable/logo_image”。我使用以下方法提取 ListPreference 的值:
SharedPreferences shared = getSharedPreferences("com.joshuariddle.recoveryworkscounter.settings", MODE_PRIVATE);
String logo_id = (shared.getString("pref_logo",""));
Run Code Online (Sandbox Code Playgroud)
这将可绘制资源作为字符串返回,即@drawable/logo_image。然后将该 drawable/image 插入到我的布局中,我使用:
ImageView iv_logo = (ImageView) findViewById(R.id.imgLogo);
iv_logo.setImageResource(getResources().getIdentifier(logo_id, "drawable", "com.yourpackage"));
Run Code Online (Sandbox Code Playgroud)
这将使用 setImageResource() 使用以下方法返回的 int 将 ImageView 资源更改为新的可绘制资源,该方法从表示 com.yourpackage 中可绘制资源的字符串返回一个 ID (int):
getResources().getIdentifier(logo_id, "drawable", "com.yourpackage")
Run Code Online (Sandbox Code Playgroud)
您也可以使用相同的方法来更改其他使用 drawable 的资源,例如布局背景等。您只需要使用此方法来获取作为 int 的 ID:
getResources().getIdentifier("Resource Id String", "drawable", "com.yourpackage")
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
75887 次 |
最近记录: |