一、Android Studio 系统模版
1.1 系统模版路径:
1.2 模版目录结构
二、模版目录结构详解
2.1 template.xml:供用户选择
<template
format="5"
revision="5"
name="Empty Activity"
minApi="7"
minBuildApi="14"
description="Creates a new empty activity">
<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"
type="string"
constraints="layout|unique|nonempty"
suggest="${activityToLayout(activityClass)}"
default="activity_main"
visibility="generateLayout"
help="The name of the layout to create for the activity" />
<parameter
id="isLauncher"
name="Launcher Activity"
type="boolean"
default="false"
help="If true, this activity will have a CATEGORY_LAUNCHER intent filter, making it visible in the launcher" />
<parameter
id="packageName"
name="Package name"
type="string"
constraints="package"
default="com.mycompany.myapp" />
parameter:
1. id:唯一标识,会通过 id 获取 type 的值
2. name:左边的名称
3. type:string | boolean
4. constraints:约束(值唯一 、不为空等)
5. suggest:名称对应关系
6. default:默认的名称(默认值满足 suggest 的对应关系)
7. help:下方提示文字
2.2 globals.xml.ftl:初始化一些属性值
2.3 recipe.xml.ftl:
<?xml version="1.0"?>
<recipe>
<#include "../common/recipe_manifest.xml.ftl" />
<#if generateLayout>
<#include "../common/recipe_simple.xml.ftl" />
<open file="${escapeXmlAttribute(resOut)}/layout/${layoutName}.xml" />
</#if>
<instantiate from="root/src/app_package/SimpleActivity.java.ftl"
to="${escapeXmlAttribute(srcOut)}/${activityClass}.java" />
<open file="${escapeXmlAttribute(srcOut)}/${activityClass}.java" />
</recipe>
open:打开 file 中的文件
instantiate:指定创建生成的文件
copy:复制资源文件
merge:合并文件
2.4 SimpleActivity.java.ftl:
package ${packageName};
import ${superClassFqcn};
import android.os.Bundle;
public class ${activityClass} extends ${superClass} {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
<#if generateLayout>
setContentView(R.layout.${layoutName});
</#if>
}
}
marker 语法:
1.引用:${id}
id 对应 template.xml 文件中的 id,${packageName} 是引用 template.xml 文件中 id=packageName 的值
2.if 判断:<#if id>…< /#if>
满足条件则执行 if 语句中的内容