Android开发:如何从strings.xml动态获取drawable图片资源?
动态获取中配置的图片资源
你完全不需要手动指定每个图片的ID!你找到的那段代码思路是对的,只是可能有变量名的小笔误,我来帮你梳理清楚完整的实现方式:
首先,你的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
相关产品推荐
相关产品推荐

