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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 12:10:21