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
相关产品推荐
相关产品推荐

