Android Studio Activity模版开发
2019-01-29 本文已影响25人
唠嗑008
为什么要使用模版开发
在开发之中,我们总会遇到一些比较通用的模块,比如启动页,登陆功能,网络请求,MVP模式等等。有些功能甚至需要重复使用多次,我们通常的做法是把之前的模块拷贝过来,修改名字,再修改内容。如果使用了代码模板的话,会减少很多重复的工作。
我们经常使用的系统的模版的结构如下图所示。如果你想自定义一个Activity模版或其他类模版,你可以把这2个文件拷贝过去,修改一下就行了。
这种方式稍微复杂一些,因为新手大都对这几个文件不熟悉,不知道怎么修改。我推荐一种插件化的方式(强烈推荐)
https://www.jianshu.com/p/e3548f441440
模板文件后缀名都是以【.ftl】结尾。
- globals.xml.ftl 全局变量文件 存放的是一些全局变量
- recipe.xml.ftl 配置要引用的模板路径以及生成文件的路径
- template.xml 模板的配置信息,以及要输入的参数.定义了模板的流程框架 基本结构
- template_blank_activity.png 显示的缩略图(只是展示用)
-root Activity模板文件
globals.xml.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的值访问到该值。
recipe.xml.ftl
<?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中
-
copy :从root中copy文件到我们的目标目录,比如drawable、anim等文件夹。
-
open:在代码生成后,打开指定的文件,比如我们新建一个Activity后,默认就会将该Activity打开。
template.xml
<?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>
- <template>中的
name
属性,对应新建Activity
时显示的名字 - <category>对应
New
的类别为Activity
parameter,部分属性介绍:
-
id
:唯一标识,最终通过该属性的值,获取用户输入值(文本框内容,是否选中) -
name
:界面上的类似label的提示语 -
type
: 输入值类型 -
constraints
:填写值的约束 -
suggest
:建议值,比如填写ActivityName的时候,会给出一个布局文件的建议值。 -
default
:默认值 -
help
:底部显示的提升语
template.xml的最下面的部分引入了globals.xml.ftl和recipe.xml.ftl。
我创建了启动页和MVP模式的2个模版,大家可以参考一下。后续有新的,会继续添加上去。
https://github.com/zhouxu88/CustomTemplate