2 yiranwujixian yiranwujixian 于 2012.09.19 09:56 提问

Android的drawable资源目录下能包含子目录吗?

在android SDK文件中,所有的示例使用@drawable/my_image这个xml语法直接寻找存储在我的工程中的res/drawable目录下的图片。
我想知道在drawable资源目录下再创建一个子目录是否是确实不能用。
例如,我的布局目录是这样的:

res/drawable
-- sandwiches
  -- tunaOnRye.png
  -- hamAndSwiss.png
-- drinks
  -- coldOne.png
  -- hotTea.png

我能引用tuna salad sandwich这个游戏的图片作为@drawable/sandwiches/tunaOnRye吗?
或者我必须在drawable资源目录中保持水平的层级。

5个回答

mansuifengqi
mansuifengqi   2012.09.19 10:37
已采纳

不可以的,资源机制在drawable资源目录中不支持子文件夹,所以,你需要保持这个水平层级。
你显示出的目录的布局将导致没有可用的图像。
根据我的经验,在res/drawable文件夹里边的任何项目都有一个子文件夹,这将引起资源编译器不可用--组织R.java文件正确的生成。

niangzhi
niangzhi 在Android2.2中,这个不会引起编译器的错误,但是当生成R类的时候,任何子目录都会被忽略掉。这个真的很不好用,而且使得管理大的图片工程很困难。
5 年多之前 回复
yizhenbeifeng
yizhenbeifeng   2012.09.19 11:01

我用的变通方案从本质上来说就是(android它本身看起来很适用)用下划线代替斜杠,所以你的结构看起来就像这样:

sandwich_tunaOnRye.png
sandwich_hamAndSwiss.png
drink_coldOne.png
drink_hotTea.png

这个方法需要你非常的谨慎细致命名,不要让文件本身发生名称上的混乱(如果你决定饮料和三明治真的都是食物,你就应该做一个大规模的重命名,而不是简单的把他们移动到该目录下);但是和文件夹结构相比,你的程序逻辑的复杂性不会遭受太严重的改变。
这种情况的确很糟糕。Android就是奇妙的和可怕的设计方案的大杂烩。我们现在只能希望后面到期的部分能够得到淘汰。

niangzhi
niangzhi   2012.09.19 11:34

使用assets floder
示例代码

InputStream is = null;
try {
    is = this.getResources().getAssets().open("test/sample.png");
} catch (IOException e) {
    ;
}

image = BitmapFactory.decodeStream(is);
zlQQhs
zlQQhs   2013.02.26 14:12

实践是检验真理的唯一标准 ,试一下不就知道

oSanYeCao1234567
oSanYeCao1234567   Ds   Rxr 2016.10.10 18:16

可以创建文件夹,但是里面的资源是引用不到的

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!