Android开发:minSdk14下如何加载drawable-nodpi文件夹所有图片?
解决Android加载drawable-nodpi下所有图片的问题
嘿,我明白你的困扰了——Android的资源编译系统会把不同dpi文件夹里的资源统一整合到R.drawable中,所以直接用R.drawable.class.getFields()确实没法直接筛选出nodpi文件夹里的图片。不过针对你的minSdkVersion 14,有两个简便的方案可以试试:
方案一:通过命名约定筛选(推荐)
这是最贴合Android资源系统的方法,只需要给drawable-nodpi里的图片统一加个前缀(比如nodpi_),然后遍历R.drawable的字段时筛选符合命名规则的ID就行。
代码示例:
List<Integer> nodpiDrawableIds = new ArrayList<>(); Field[] allDrawableFields = R.drawable.class.getFields(); for (Field field : allDrawableFields) { try { // 筛选以nodpi_开头的资源名 if (field.getName().startsWith("nodpi_")) { // 获取对应的资源ID int drawableId = field.getInt(null); nodpiDrawableIds.add(drawableId); } } catch (IllegalAccessException e) { e.printStackTrace(); } }
这个方法完全兼容minSdk14,不需要额外依赖,而且后续使用这些资源的时候还是可以用常规的setImageResource()方法,非常方便。
方案二:把图片移到assets目录加载
如果你不想修改图片命名,可以把drawable-nodpi里的图片转移到assets/nodpi_images文件夹下,然后通过AssetManager读取文件列表并加载图片:
代码示例:
AssetManager assetManager = getApplicationContext().getAssets(); List<Bitmap> nodpiBitmaps = new ArrayList<>(); try { // 获取assets/nodpi_images下的所有文件名 String[] imageFiles = assetManager.list("nodpi_images"); for (String fileName : imageFiles) { InputStream inputStream = assetManager.open("nodpi_images/" + fileName); Bitmap bitmap = BitmapFactory.decodeStream(inputStream); nodpiBitmaps.add(bitmap); inputStream.close(); } } catch (IOException e) { e.printStackTrace(); }
这个方法不需要依赖资源命名,但加载出来的是Bitmap对象,需要自己管理内存(比如用完后回收),适合不想修改现有资源命名的场景。
总结一下,方案一操作更简单,也更符合Android的资源使用规范,推荐优先尝试~
内容的提问来源于stack exchange,提问作者Calaf
相关产品推荐
相关产品推荐

