在开发之中,咱们总会遇到一些比较通用的模块,好比启动页,登录功能,网络请求,MVP模式等等。有些功能甚至须要重复使用屡次,咱们一般的作法是把以前的模块拷贝过来,修更名字,再修改内容。若是使用了代码模板的话,会减小不少重复的工做。java
咱们常常使用的系统的模版的结构以下图所示。若是你想自定义一个Activity模版或其余类模版,你能够把这2个文件拷贝过去,修改一下就好了。面试
这种方式稍微复杂一些,由于新手大都对这几个文件不熟悉,不知道怎么修改。小程序
模板文件后缀名都是以【.ftl】结尾。性能优化
<?xml version="1.0"?> <globals> <global id="resOut" value="${resDir}" /> <global id="srcOut" value="${srcDir}/${slashedPackageName(packageName)}" /> <global id="relativePackage" value="<#if relativePackage?has_content>${relativePackage}<#else>${packageName}</#if>" /> </globals>
定义一些全局的变量,能够看到其内部有<global>
标签,分别定义id,type,默认值。同理,咱们能够经过id的值访问到该值。网络
<?xml version="1.0"?> <recipe> <instantiate from="root/src/app_package/MVPActivity.java.ftl" to="${escapeXmlAttribute(srcOut)}/${activityName}Activity.java" /> <merge from="root/AndroidManifest.xml.ftl" to="${escapeXmlAttribute(manifestOut)}/AndroidManifest.xml" /> <merge from="root/${resIn}/values/strings.xml.ftl" to="${escapeXmlAttribute(resOut)}/values/strings.xml" /> </recipe>
instantiate : 把Activity模版或其余模版拷贝到咱们的项目中,而且会更改咱们自定义的参数。架构
merge : 合并的意思,好比将咱们使用到的strings.xml合并到咱们的项目的stirngs.xml中app
copy :从root中copy文件到咱们的目标目录,好比drawable、anim等文件夹。框架
open:在代码生成后,打开指定的文件,好比咱们新建一个Activity后,默认就会将该Activity打开。布局
<?xml version="1.0"?> <template format="5" revision="5" name="MVPActivity" minApi="7" minBuildApi="14" description="mvp"> <category value="Activity" /> <formfactor value="Mobile" /> <!-- input data --> <parameter id="activityName" name="Activity Nme" type="string" default="MVP" help="" /> <!-- 128x128 thumbnails relative to com.puke.template.xml --> <thumbs> <!-- default thumbnail is required --> <thumb>template_cover.png</thumb> </thumbs> <globals file="globals.xml.ftl" /> <execute file="recipe.xml.ftl" /> </template>
name
属性,对应新建Activity
时显示的名字New
的类别为Activity
parameter,部分属性介绍:性能
id
:惟一标识,最终经过该属性的值,获取用户输入值(文本框内容,是否选中)name
:界面上的相似label的提示语type
: 输入值类型constraints
:填写值的约束suggest
:建议值,好比填写ActivityName的时候,会给出一个布局文件的建议值。default
:默认值help
:底部显示的提高语template.xml的最下面的部分引入了globals.xml.ftl和recipe.xml.ftl。
想学习更多Android知识,请加入Android技术开发企鹅交流 7520 16839
进群与大牛们一块儿讨论,还可获取Android高级架构资料、源码、笔记、视频
包括 高级UI、Gradle、RxJava、小程序、Hybrid、移动架构、React Native、性能优化等全面的Android高级实践技术讲解性能优化架构思惟导图,和BATJ面试题及答案!
群里免费分享给有须要的朋友,但愿可以帮助一些在这个行业发展迷茫的,或者想系统深刻提高以及困于瓶颈的
朋友,在网上博客论坛等地方少花些时间找资料,把有限的时间,真正花在学习上,因此我在这免费分享一些架构资料及给你们。但愿在这些资料中都有你须要的内容。