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

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

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

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

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

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


当前回答

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

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

其他回答

我使用的解决方法(Android本身似乎更喜欢)基本上是用下划线代替正斜杠,所以你的结构看起来像这样:

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

这种方法要求您在命名时一丝不差,并且不会使文件本身变得更容易(如果您决定饮料和三明治真的都应该是“食物”,那么您必须进行大规模重命名,而不是简单地将它们移动到目录中);但是与相同的文件夹结构相比,您的编程逻辑的复杂性并没有受到太大的影响。

这种情况确实很糟糕。Android是一个优秀和糟糕设计决策的混合体。我们只能希望后一部分能尽快被淘汰:)

实际上,在Android Studio上这是可能的。你可以有嵌套资源,如下所示:

这里还有一个插件来对资源进行分组。

但我建议避免这样做。

Gradle与Android Studio可以这样做(链接)。

在"配置结构"一段中

sourceSets {
 main {
    java {
        srcDir 'src/java'
    }
    resources {
        srcDir 'src/resources'
    }
 }
}

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

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

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

有可能有多个可绘制的文件夹,有一个额外的文件夹平行于'res'和一个子目录'drawable',然后添加以下到gradle:

sourceSets {
    main {
        res.srcDirs 'src/main/<extra_res>'
    }
}

用gradle 6.5.1测试