前言
在安卓开发中,会把布局文件放在layout文件夹下,但是随着项目体积的日益增长,都在layout下会变得很难寻找,于是,就想到了创建子目录的方式。
解决
java插件引入了一个概念叫做SourceSets,通过修改SourceSets中的属性,可以指定哪些源文件(或文件夹下的源文件)要被编译,哪些源文件要被排除。Gradle就是通过它实现Java项目的布局定义。
SourceSets目录结构是固定的Java的标准项目目录布局
安卓可以使用sourceSets
来加载资源。
于是,在app.gradle
下我们可以:
android {
···
sourceSets {
main {
res.srcDirs = [‘xxx’,'xxx']
}
}
}
但是手动写目录的话,一个是很慢,另一个是可能会遗漏,于是,我们就应该用编程的办法来加载layout:
def listSubFile = {
def resFolder = 'src/main/res/layout'
def files = file(resFolder).listFiles()
def folders = []
files.each {
item ->
if (!item.name.endsWith(".DS_Store") && !item.name.endsWith('.xml')) {
folders.add(item.absolutePath)
println(item.absolutePath)
}
}
folders.add(file(resFolder).parentFile.absolutePath)
println(file(resFolder).parentFile.absolutePath)
return folders
}
sourceSets {
main {
res.srcDirs = listSubFile()
}
}
这样就没什么问题了。引用依旧是R.layout.xx
。
注意: 子文件夹必须为xxx/layout/xx.xml的格式,直接xx/xx.xml会找不到资源。
如果你觉得对你有用,请帮助我。