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

这个问题已经在这里有了答案:

  • 在Android中以编程方式更改ImageView的图像                                     7个答案
  • 如何更改ImageView的图像? [重复]                                     4个答案

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

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

blackaardvark asked 2020-01-14T03:35:04Z
3个解决方案
94 votes

我将字符串和图像之间的关系放在地图中:

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并获取ID转换为字符串的视图

Cristian answered 2020-01-14T03:35:35Z
33 votes

使用setImageResource(int)

Mohit Deshpande answered 2020-01-14T03:35:55Z
4 votes

如果我理解正确,则要显示字符串中的图像资源。 我在一个应用程序中执行该操作,用户可以从自定义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",""));

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

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

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

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

您还可以使用相同的方法来更改使用可绘制对象的其他资源,例如布局背景等。您只需使用此方法即可将ID作为整数获取:

    getResources().getIdentifier("Resource Id String", "drawable", "com.yourpackage") 
OGZCoder answered 2020-01-14T03:36:30Z
translate from https://stackoverflow.com:/questions/5294031/how-do-i-set-an-imageviews-source-programmatically-in-android