如同JAVA开发的项目结构,Android开发时也一样在学习初期就养成好的习惯,将所用的资源文件合理的分类存放,便于使用维护。
在进行第一个程序开发时,在引用背景图片时,示例中在res/drawable下新建了一个directory 用于存放所需图片。在将文件夹建好后,复制图片,选择了新建的文件目录路径,粘贴后却发现drawable无法展开,无法找到粘贴的图片,但是切换到Project模式却可以看到文件夹和图片确实存在。
AS的Project模式,看到的是实际的目录结构。
AS的Android模式,看到的是被整合过的目录,并非实际存在的目录。
Android模式下的目录命名是严格控制的,只要你的目录命名(以特定名称+“-”)不在可选的范围内(如drawable,layout,menu,mipmap,values等),目录中的资源时不会被读取的(如res下新建名为 whatever 的目录中的资源),也是不可以使用的。想要使用资源就必须让所在的目录按照规范进行命名(比如命名为drawable-whatever)。
资源在整合时,会按分类汇总所有规范命名目录下的资源。如drawable目录下为所有 以 drawable- 开头的目录下的所有文件(不包括子级目录中的文件!)。
资源目录列表(sourceSets)规定了项目可以使用资源的范围,不在范围内的资源不被读取也无法被引用。资源目录列表可以在build.gradle文件中配置。
若一个规范命名的目录的上一级目录不在资源目录列表中,也是无法读取使用的。如下图红框的资源,drawable-eee 的上级目录为 drawable-hdpi 并不在资源目录列表中(默认资源列表是 src/main/res,可能有不同),这时想要使用里面的资源就需要把他 drawable-hdpi添加进资源目录列表中。
build.gradle中进行下列配置后,便可正常使用drawable-eee中的资源。
android{
....
sourceSets {
main {
res{
srcDir 'src/main/res/drawable-hdpi'
}
}
}
}
srcDir ‘’ 可以将指定路径添加入现有的资源目录列表。
srcDirs = [’’,’’,’’] 可以替换现有的资源目录列表。
安卓资源文件详解:https://www.cnblogs.com/guop/p/4973829.html
Gradle详解:https://github.com/rujews/android-tech-docs/blob/master/new-build-system/user-guide/README.md#321