我有一个应用程序,将所有布局放在 res/layout 文件夹中变得非常大且难以管理。我想要所有布局的文件夹。我读到布局文件夹中不能有子目录,但 Assets 文件夹中可能有。所以我的问题是,如何从 Assets 目录中的文件访问文件并将其设置为我的 View ?类似下面的内容
int assetId = getAssets().open("main.xml");
setContentView(assetId)
上面的代码行得通吗?我将如何为我的 View 设置该 xml 文件? 谢谢。
最佳答案
您可以通过使用自定义脚本并在构建执行之前运行它来实现这一点。 Android 似乎会忽略布局子目录中的任何内容,因此您可以安全地将文件放入其中。下面的 ruby 脚本(为 Linux 编写,但很容易转换到其他平台)将删除 res/layout/目录以外的所有内容,并将子目录中的每个文件复制到 res/layout/:
#!/usr/bin/ruby
需要“fileutils”
def collect_files(目录)
FileUtils.cd(目录)
FileUtils.rm(Dir.entries(directory).reject{|x| File.directory?(x)}) #删除基本目录下的所有布局文件
files_to_copy=Dir.glob("**/*").reject{|x|文件.目录?(x)}
files_to_copy.each{|x|打印“复制#{x} 到#{directory}\n”}
FileUtils.cp(files_to_copy, directory) #复制子目录下的所有文件到基目录
结尾
如果 ARGV[0]!=nil && File.directory?(ARGV[0])
xml_dir=ARGV[0]
layout_dir="#{xml_dir}/layout"
收集文件(布局目录)
别的
puts("必须指定一个有效的目录!")
结尾
请注意,上述脚本并不可靠,实际上会删除子目录中不 的任何布局文件。如果愿意,您可以随时删除删除步骤,但是您从子目录中删除的任何文件都将保留在主目录中以供后续构建。
如果您正在运行 Eclipse,那么您可以配置一个外部工具,稍后您可以将其添加到您的构建器中。只需打开运行 -> 外部工具 -> 外部工具配置,然后在“程序”下创建一个新工具。这是我的设置的屏幕截图:
注意:工作目录是红色鲱鱼,不会被使用。您需要指定放置脚本的位置,而不是此处显示的位置
现在您可以将该工具添加到项目的构建器中。选择您的项目并打开项目 -> 属性。现在选择“Builders”项并单击“Import”。如果你成功定义了它,你应该在那里看到你的工具。它需要在构建过程的其余部分之前运行,因此请确保将其移至列表顶部。完成后应该是这样的:
现在您只需将布局文件移动到子目录中(但要注意名称冲突,请记住这些文件最终都会在同一目录中进行构建!)并构建您的项目。当您执行此操作时,您会看到它们神奇地出现在/res/layout/的根目录中,然后您的应用应该会正常构建。
Caveat Scriptor:如果您要指定多个布局,或任何其他使用的不仅仅是/res/layout/目录,您将需要多次扩展此脚本或添加该工具不同的目录来处理它。我个人并没有使用这种技术,所以没有看到它失败的地方,但是已经使用基本的 android Hello World 应用程序进行了测试,在一些子目录中有几个布局。
此外,如果与包含空格的路径一起使用,我的脚本将会中断!
关于android - 是否可以从 Assets 目录中的 xml 文件创建 View ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5482293/