【问题标题】:How do I set an ImageViews source programmatically in Android? [duplicate]如何在 Android 中以编程方式设置 ImageViews 源? [复制]
【发布时间】:2018-04-06 13:12:48
【问题描述】:

我正在制作一个复合 ui 元素,它带有一个对象(一名球员),我想为该球员效力的球队选择相应的图像(球员对象的图像编号有一个字符串值。我有图像在我项目的资源文件夹中。

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

【问题讨论】:

    标签: android


    【解决方案1】:

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

    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 秒 :)
    • @MohitDeshpande: 哈哈哈哈哈哈它一直在发生。
    • 是的,这很好用。我忘记了 R.etc 返回整数:/ 谢谢!
    【解决方案2】:

    【讨论】:

      【解决方案3】:

      如果我理解正确,您想从字符串中显示图像资源。我在用户可以从自定义 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 资源更改为新的可绘制资源,该方法从 com.yourpackage 中表示可绘制资源的字符串返回一个 ID (int):

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-08-12
        • 1970-01-01
        • 2012-06-25
        • 2014-01-23
        • 1970-01-01
        • 1970-01-01
        • 2013-01-31
        相关资源
        最近更新 更多