在上一篇讲到的自定义AndroidStudio文件模板的方法,但这种方法虽然简单却只能一次生成一个文件。有没有方法能一键生成一套文件呢?其实AndroidStudio已经提供了这样的功能,而且我们也经常在用。
如图红框上的文件就是AndroidStudio已经提供的模板文件组,最常用的就是Activity了。但我们使用这里的模板新建一个Activity,AndroidStudio就会自动为我们新建一个Activity的java类文件、和Layout布局xml文件,同时还会贴心地为我们在Manifest文件中注册我们的Activity。这一切是怎么做到的呢?
溯源
我想,这些模板肯定是被放在某些地方的文件集,说不定文件夹的名字就对应这里模板的名字呢!用强大的文件搜索软件EveryThing搜一下这里的其中一个模板的名字,就会发现,这些模板文件就存在我们AndroidStudio(IDEA)的安装目录中。
一下是在Windows下存放文件模板的目录:
<AndroidStudio安装目录>\plugins\android\lib\templates
在activitys目录下就存放着相应的Activity模板:
探秘
好奇心是学习的动力,我迫不及待地打开BasicActivity目录:
发现有一个root目录,若干.ftl文件和若干图片。
这些文件怎么关联在一起,怎么发挥作用,怎么接受用户输入并生成文件的呢?
经过Google后,我发现了这张图:
原来如此,FreeMarker接受用户输入的参数和两种.ftl文件,输出生成的代码文件。问题来了,what is FreeMarker?能吃吗?
FreeMarker是一款模板引擎: 即一种基于模板和要改变的数据, 并用来生成输出文本(HTML网页、电子邮件、配置文件、源代码等)的通用工具。--源自百度百科
FreeMarker很符合我们的需求,看来这个解析器是集成在AndroidStudio中的。有人可能会吐槽,搞个模板还要专门跑去学FreeMarker吗?其实,就算不懂FreeMarker语法(最好有一丁点了解)也可以轻松搞一个简单的文件模板,因为AndroidStudio提供很多现成的Demo是最好的学习资料,创造往往从模仿开始!
先从这个template.xml文件开始:
<?xml version="1.0"?>
<template
format="5"
revision="6"
name="Basic Activity"
minApi="7"
minBuildApi="14"
requireAppTheme="true"
description="Creates a new basic activity with an app bar.">
<category value="Activity"/>
<formfactor value="Mobile"/>
<parameter
id="activityClass"
name="Activity Name"
type="string"
constraints="class|unique|nonempty"
suggest="${layoutToActivity(layoutName)}"
default="MainActivity"
help="The name of the activity class to create"/>
------------------此处省略若干<parameter/>标签-------------------------------
<parameter
id="useFragment"
name="Use a Fragment"
type="boolean"
default="false"
help="If true, the content will be a fragment"/>
<!-- 128x128 thumbnails relative to template.xml -->
<thumbs>
<!-- default thumbnail is required -->
<thumb>template_basic_activity.png</thumb>
<!-- attributes act as selectors based on chosen parameters -->
<thumb useFragment="true">template_basic_activity_fragment.png</