您可以通过使用自定义脚本并在构建执行之前运行它来实现此目的。 Android 似乎会忽略布局子目录中的任何内容,因此您可以安全地将文件放入其中。下面的 ruby 脚本(为 Linux 编写,但很容易转换到其他平台)将删除 res/layout/ 中不是目录的所有内容,并将子目录中的每个文件复制到 res/layout/:
#!/usr/bin/ruby
require "fileutils"
def collect_files(directory)
FileUtils.cd(directory)
FileUtils.rm(Dir.entries(directory).reject{|x| File.directory?(x)}) #Remove all layout files in base dir
files_to_copy=Dir.glob("**/*").reject{|x| File.directory?(x)}
files_to_copy.each{|x| print "Copying #{x} to #{directory}\n"}
FileUtils.cp(files_to_copy, directory) #Copy all files in subdir into base dir
end
if ARGV[0]!=nil && File.directory?(ARGV[0])
xml_dir=ARGV[0]
layout_dir="#{xml_dir}/layout"
collect_files(layout_dir)
else
puts("Must specify a valid directory!")
end
请注意,上述脚本并不可靠,实际上会删除子目录中的所有布局文件not。如果您愿意,您可以随时删除删除步骤,但是您从子目录中删除的任何文件都将保留在主目录中以供后续构建使用。
如果您正在运行 Eclipse,那么您可以配置一个外部工具,您可以稍后将其添加到您的构建器中。只需打开运行 -> 外部工具 -> 外部工具配置,然后在“程序”下创建一个新工具。这是我的设置的屏幕截图:
注意:工作目录是红鲱鱼,不会被使用。您需要指定放置脚本的位置,而不是此处显示的位置
现在您可以将该工具添加到项目的构建器中。选择您的项目并打开项目 -> 属性。现在选择“Builders”项目并单击“Import”。如果您成功定义了它,您应该在那里看到您的工具。它需要在构建过程的其余部分之前运行,因此请确保将其移至列表顶部。完成后应该是这样的:
现在您只需将布局文件移动到子目录中(但要注意名称冲突,记住这些文件最终都将位于同一目录中以进行构建!)并构建您的项目。当您执行此操作时,您会看到它们神奇地出现在 /res/layout/ 的根目录中,然后您的应用应该会正常构建。
Caveat Scriptor:如果您要指定多个布局,或者其他任何不只是使用 /res/layout/ 目录的东西,您需要扩展此脚本或多次添加该工具让不同的目录来处理它。我个人不使用这种技术,所以还没有看到它的失败之处,但是已经用一个基本的 android Hello World 应用程序进行了测试,在一些子目录中有几个布局。
另外,如果使用包含空格的路径,我的脚本会中断!