Android中getIdentifier获取drawable-hdpi目录ID返回0,如何获取该目录资源?
问题根源
你用getResources().getIdentifier("drawable-hdpi", "drawable", ...)获取目录ID的思路本身就不成立——Android资源系统不会为带密度限定符的drawable目录(比如drawable-hdpi)生成独立的资源ID,getIdentifier只能用于获取具体资源文件的ID,而非目录。另外,R类中资源ID的分配没有“同一目录ID连续区间”的规则,所以靠ID范围过滤的逻辑也完全不可靠。
可行方案
方案1:通过统一前缀过滤资源(适用于res目录下的资源)
既然你已经确认这些图片在R.drawable中存在,且文件名有规律(比如都是img开头),可以遍历R.drawable的字段,通过字段名前缀来筛选:
Field[] fields = R.drawable.class.getFields(); List<Integer> targetImageIds = new ArrayList<>(); for (Field field : fields) { String fieldName = field.getName(); // 筛选以img开头的资源(对应img1、img2、img3) if (fieldName.startsWith("img")) { try { int resourceId = field.getInt(null); targetImageIds.add(resourceId); } catch (IllegalAccessException e) { e.printStackTrace(); } } }
方案2:将图片移至assets目录(更适合获取目录文件列表)
如果你确实需要获取某个目录下的完整文件列表,建议把这些图片移到assets/drawable-hdpi目录下,然后通过AssetManager来获取列表:
AssetManager assetManager = getAssets(); try { String[] files = assetManager.list("drawable-hdpi"); for (String fileName : files) { // 根据文件名加载资源 InputStream is = assetManager.open("drawable-hdpi/" + fileName); Bitmap bitmap = BitmapFactory.decodeStream(is); // 处理加载后的资源 is.close(); } } catch (IOException e) { e.printStackTrace(); }
注意:放在assets目录下的资源不会被系统自动适配设备密度,需要你自己根据当前设备的密度信息选择对应的目录加载。
内容的提问来源于stack exchange,提问作者Don Subert
相关产品推荐
相关产品推荐

