前言
在开发 Android 项目的过程中,难免会遇到重复编写同一段逻辑的代码的情况,就拿目前比较流行的 MVP 模式来举例好了,要实现一个页面的 MVP 开发,我们需要编写以下的类:
- 一个 MVP 的契约接口,里面有一个
view
层接口 和P
层的接口(或抽象类) - 对应的
view
层接口的实现类 - 对应的
P
层接口的实现类 - 对应的
model
层
如果当前页面需要使用 RecyclerView
,那么还得去写对应的 Adapter
和 viewHolder
等你全部弄完后,估计你的大脑都快进入 CD 阶段了,效率一点都不搞高效
因此,我们很有必要去使用一些自动生成代码的技巧,比方说 Android Studio Template
Android Studio Template
当我们通过 Android Studio 创建一个新的 Actvity
时可以看到下面的图片:
只要点击下去,就能很轻松生成一个全新的 Actvity
,这就是 Android Studio Template 的作用
Android Studio Template 依靠 FreeMarker 引擎,将事先定义好的模板文件生成我们所需的 class 文件、layout 文件等等,可以极大减少样板式代码的编写,帮助我们节省大量的时间
先去到 Android Studio\plugins\android\lib\templates 下面,这里就是模板的存放位置 ,可以看到这里其他默认的模板:
这里以相对简单典型的 EmptyActivity
为例进行讲解
用编译器打开,可以看到下面的东西:
下面我们来一个一个来看,这里先将 kt(SimpleActivity.kt.ftl) 的模板忽略掉,先看 SimpleActivity.java.ftl
里面的内容:
package ${
packageName};
........
........
........
public class ${
activityClass} extends ${
superClass} {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
........
setContentView(R.layout.${
layoutName});
........
........
}
........
}
将全部的影响因素都去掉了,这里就很好懂了,这个就是 Activity
代码生成模板,想必这里时候都注意到了 ${activityClass} 等变量了,这些都是从外部获取值的标量,那么这个外部是哪里呢?
其实就是 template.xml
<?xml version="1.0"?>
<template
format="5"
revision="5"
//模板的名字,不可重复(注释在开发模板时需删除)
name="Empty Activity"
minApi="9"
minBuildApi="14"
//模板的提示语(注释在开发模板时需删除)
description="Creates a new empty activity">
//category 是模板类型(注释在开发模板时需删除)
//不写的话,无法出现了上面图一右键菜单里面(注释在开发模板时需删除)
<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
id="generateLayout"
name="Generate Layout File"
type="boolean"
default="true"
help="If true, a layout file will be generated" />
<parameter
id="layoutName"
name="Layout Name