在Android SDK文档中,所有使用@drawable/my_image xml语法的示例都直接处理存储在项目res/drawable目录中的图像。

我想知道在可绘制目录中创建子目录是否显式不允许。

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

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

我可以引用金枪鱼沙拉三明治的图片@drawable/三明治/tunaOnRye吗

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


当前回答

检查Bash Flatten Folder脚本,该脚本将文件夹层次结构转换为单个文件夹

其他回答

不允许子目录,资源必须只包含[a-z0-9_.]。

不,你有大写字母,没有正斜杠。

部分解决这个问题的一种方法是使用API Level后缀。 我使用res/layout-v1, res/layout-v2等在同一个apk中持有多个子项目。 此机制可用于所有资源类型。

显然,这只能用于当你的目标API级别高于res/layout-v?你在吸毒。

另外,要注意Android 1.5和1.6中的漏洞。 请参阅有关API Level后缀的Andoroid文档。

对于这种情况,有一个解决方案:你可以创建一个resVector(例如)文件夹,与默认的res文件夹在同一级别。在那里你可以添加任何drawable-xxx资源文件夹:

resVector
-drawable
-layout
-color

之后你所需要做的就是添加

sourceSets {
        main.res.srcDirs += 'src/main/resVector'
    }

进入你的构建。Gradle文件(在android{}内)。

不是我的,但我在寻找这个问题时发现了这个线程,如果你使用Android Studio和Gradle构建系统,它很容易,不需要插件,只需要一点点构建文件编辑

https://stackoverflow.com/a/22426467/618419

使用资产文件夹。

示例代码:

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

image = BitmapFactory.decodeStream(is);