繁体   English   中英

Android 资源问题:如何获取 res/drawable-hdpi 文件夹的标识符?

[英]Android resources problem: How to getIdentifier for a res/drawable-hdpi folder?

在 Android 应用程序中,我试图获取res/drawable-hdpi中的文件列表

我的理解是我应该能够获得res子文件夹的唯一标识符,然后遍历R的字段以过滤不在文件夹 ID 范围内的文件。

int directoryId = getResources().getIdentifier("drawable-hdpi", "drawable", getPackageName());

Field[] fields = R.drawable.class.getFields();
for (Field field : fields) {
    int resourceId = field.getInt(null);
    if (resourceId >= directoryId && resourceId < (directoryId + 100)) {
        // resourceId is a file in the drawable-hdpi directory
    }
}

但是, directoryId设置为0 我知道这是预期的行为,如果

  1. 该目录不存在
  2. 目录名称不符合模式
  3. 该目录被明确排除

但是,这些都不是这样,所以我真的很困惑。 这是文件夹结构

res
├── drawable
│   ├── ic_launcher_background.xml
│   ├── ic_launcher_foreground.xml
│   └── ic_wallpaper_black_24dp.xml
├── drawable-hdpi
│   ├── img1.jpg
│   ├── img2.jpg
│   └── img3.jpg
...

我感兴趣的是img1.jpgimg2.jpgimg3.jpg 。我可以在R的字段列表中看到它们,因此必须包含该文件夹。 我已经三次检查该文件夹是否符合命名要求。

我究竟做错了什么?

我正在尝试获取 res/drawable-hdpi 中的文件列表

这在运行时是不可能的。 您可以创建一个 Gradle 任务或其他编译时脚本来检查您的硬盘并生成包含此信息的内容(使用 JavaPoet 的 Java 代码、作为资产的 JSON 文件等)。 或者,您可以不使用res/ ,而是将图像放在assets/中,然后在Context上使用getAssets().list()来迭代资产(警告:库也可能打包资产,所以不要假设它们是全都是你的)。

我的理解是,我应该能够获取 res 子文件夹的唯一标识符,然后遍历 R 的字段以过滤不在文件夹 ID 范围内的文件。

这有一些问题:

  • 资源目录没有ID

  • 从您的角度来看,资源 ID 是随机数,可以随构建而变化

  • R表示统一标识符空间中的所有资源,而不是与某些特定资源限定符集相关联的资源(例如,您的字符串、可绘制对象、布局、尺寸等都以半任意顺序获得R值)。

我知道这是预期的行为

这一直是预期的行为。 我不知道你在哪里看到的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM