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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 03:29:27