[英]how to use images present in drawable-hdpi,drawable-mdpi,drawable-ldpi of res folder?
[英]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
。 我知道这是预期的行为,如果
但是,这些都不是这样,所以我真的很困惑。 这是文件夹结构
res
├── drawable
│ ├── ic_launcher_background.xml
│ ├── ic_launcher_foreground.xml
│ └── ic_wallpaper_black_24dp.xml
├── drawable-hdpi
│ ├── img1.jpg
│ ├── img2.jpg
│ └── img3.jpg
...
我感兴趣的是img1.jpg
、 img2.jpg
和img3.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.