You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android开发:如何从strings.xml动态获取drawable图片资源?

动态获取中配置的图片资源

你完全不需要手动指定每个图片的ID!你找到的那段代码思路是对的,只是可能有变量名的小笔误,我来帮你梳理清楚完整的实现方式:

首先,你的配置已经正确关联了drawable里的图片资源,接下来通过TypedArray就能动态解析这些引用,自动拿到对应的图片资源ID,不用逐个写R.drawable.one这种硬编码的ID。

完整实现代码示例

// 从资源中获取对应<string-array>的TypedArray对象
TypedArray imageTypedArray = getResources().obtainTypedArray(R.array.images);
int totalImages = imageTypedArray.length();

// 可选:创建列表存储所有图片ID,方便后续复用
List<Integer> imageResourceIds = new ArrayList<>();

// 遍历所有图片资源
for (int i = 0; i < totalImages; i++) {
    // 动态获取第i个图片的资源ID,第二个参数是获取失败时的默认值(-1表示无效)
    int imgId = imageTypedArray.getResourceId(i, -1);
    if (imgId != -1) {
        imageResourceIds.add(imgId);
        // 示例:将图片设置到ImageView
        // 如果是多个ImageView,可以用数组或列表管理,这里以单个为例
        // mImgView1.setImageResource(imgId);
    }
}

// 关键:使用完TypedArray后必须回收,避免内存泄漏
imageTypedArray.recycle();

关键说明

  • 无需手动指定ID:getResources().obtainTypedArray(R.array.images)会自动解析你在里配置的@drawable/xxx引用,通过getResourceId()就能直接拿到对应的R.drawable资源ID,完全不需要硬编码。
  • 变量名注意:你提供的代码里出现了images和imgs两个变量,这应该是笔误,统一成一个变量名(比如上面的imageTypedArray)就能正常运行。
  • 错误处理:加入imgId != -1的判断是为了避免里出现无效引用导致的崩溃。
  • 资源回收:TypedArray持有系统资源,使用完毕必须调用recycle()释放,否则会造成内存泄漏。

如果你需要给多个ImageView设置图片,可以把imageResourceIds列表和你的ImageView数组对应起来循环设置,比如:

ImageView[] imageViews = {mImgView1, mImgView2, mImgView3, mImgView4, mImgView5};
for (int i = 0; i < imageViews.length; i++) {
    if (i < imageResourceIds.size()) {
        imageViews[i].setImageResource(imageResourceIds.get(i));
    }
}

内容的提问来源于stack exchange,提问作者Habib

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 09:23:41