drawable - 安卓可绘图目录可以包含子目录?

  显示原文与译文双语对照的内容

在androidsdk文档,所有的例子使用 @drawable/my_image xml语法直接解决图像存储在res/可拉的目录在我的项目。

我想知道是否明确地在可以绘制目录中创建一个子目录是不正确的。

例如如果我有以下目录布局:


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

我可以将金枪鱼沙拉三明治的图像参考为 @drawable/sandwiches/tunaOnRye

或者我必须在可以绘制目录中保持层次结构平面。

时间:

否,资源机制不支持在可以绘制目录中的子文件夹,所以是- 你需要保持层次结构平坦。

显示的目录布局将导致没有可用的图像。

从我自己的实验看来,在 res/drawable 文件夹中拥有一个子文件夹的子文件夹将导致资源编译器失败--阻止 R.java 文件被正确生成。

我使用( 而一个安卓本身似乎偏爱)的方法基本上是将一个下划线替换为一个正斜杠,这样你的结构看起来就像这样:


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

你命名的方法需要你细致,不让它更容易争论文件本身( 如果你认为饮料和三明治都应该是" food",你需要做大量的重命名,而不是简单地将它们移动到目录) ;但你的编程逻辑的复杂性不受相比严重文件夹结构等价的。

这种情况真的很糟糕。安卓是一个复杂而可怕的设计决策。 我们只能希望后面的部分能够用所有到期的时间来清除:)

使用 assets 文件夹。

代码示例:


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

image = BitmapFactory.decodeStream(is);

我喜欢使用一个简单的脚本来将设计好的目录结构展平为可以用于生成 R 文件的something 。

在drawable-hdpi中使用当前路径运行:


#!/bin/bash
DIRS=`find * -type d`
for dir in ${DIRS} ; do 
 for file in `ls ${dir}` ; do
 mv ${dir}/${file} ${dir}_${file};
 done 
 rmdir ${dir};
done

我写了一个 Eclipse 插件,它允许通过将文件名与两个下划线 __ 分隔来创建虚拟子文件夹。 项目处于早期阶段,但不要担心它不会使你的IDE崩溃

在这里可以找到更多的细节,可以自由地插入和发送请求请求:

https://github.com/kirill578/Android-Sorted-Res-Folder

enter image description here

在 Android Studio 中,你可以拥有多个源 director,这将允许你分离资源。 例如:


android {
. . ..
 android.sourceSets {
 main.res.srcDirs = ['src/main/extraresdirnamed_sandwiches', 'src/main/res']
 }
. . ..
}

但是名称不能冲突,这意味着你仍然需要有sandwiches_tunaOnRye这样的名称,但是你可以为所有的三明治有一个单独的部分。

这允许你将资源存储在不同的结构中( 对于自动生成的内容如 actionbargenerator )

这不是完美的方法。 你必须实现在这里显示的方式:

你也可以通过你可以使用的代码调用文件夹下的图像


Resources res = getResources();
Drawable shape = res. getDrawable(R.drawable.gradient_box);

TextView tv = (TextView)findViewByID(R.id.textview);
tv.setBackground(shape);

...