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

Android中如何遍历R.drawable类下的所有资源并存入数组?

实现方法

R.drawable是Android编译阶段自动生成的静态内部类,没有自带size()、get()这类遍历方法,你可以通过反射读取该类的所有字段来拿到全部drawable资源ID,实现代码如下:

ArrayList<Integer> imgArr = new ArrayList<>();
// 获取R.drawable类下的所有公开字段
Field[] drawableFields = R.drawable.class.getFields();
for (Field field : drawableFields) {
    try {
        // 仅读取int类型的资源ID字段
        if (field.getType() == int.class) {
            int resId = field.getInt(null);
            // 可选:添加过滤规则,仅保留你自己需要的图片资源,避免混入系统自动生成的无关资源
            // 示例:仅保留命名前缀为custom_img_的资源 if (field.getName().startsWith("custom_img_"))
            imgArr.add(resId);
        }
    } catch (IllegalAccessException e) {
        e.printStackTrace();
    }
}

注意事项

  • 该方法默认会拿到当前模块所有drawable目录下的资源ID,包括系统自动生成的图标等无关资源,建议给需要批量读取的图片统一命名前缀,加过滤条件即可拿到精准结果
  • 如果你开启了代码混淆,需要在混淆规则中添加-keep class 你的应用包名.R$* { *; },否则反射会找不到R类的字段
  • 如果是Kotlin项目,逻辑完全一致,只是语法写法可以简化

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.16 11:06:05