ADT模板就是在Eclipse中使用向导新建Android工程或者Android组件的时候使用的模板。ADT模板的特色:
1.能够经过简单的可视化配置[后面称之为UI parameters]来生成Android代码和资源样本
2.集成到Eclipse ADT中
3.FreeMarker驱动 html
$your_android_sdk_dir/tools/templates
咱们再打开$your_android_sdk_dir/tools/templates/activities文件夹,会发现正好和向导的选择一一对应,不过要指出的是,模板文件夹的名字并非模板的名字,这里只是刚好同样而已。
至于其余的Application Templates和Object Templates的基本状况都是同样的。 java
project_name: ...root ......AndroidManifest.xml.ftl ......res .........layout ............*.ftl/*.* ......src .........app_package ............*.ftl/*.* ...template.xml ...recipe.xml.ftl ...globals.xml.ftl ...*.png
<?xml version="1.0"?> <template format="3" revision="2" name="Blank Activity" <!-- 在向导中显示的模板名称 --> description="Creates a new blank activity, with an action bar and optional navigational elements such as tabs or horizontal swipe."> <dependency name="android-support-v4" revision="8" /> <category value="Activities" /> <!-- 模板类型 --> <parameter id="activityClass" <!-- 参数名,在ftl文件中能够用${activityClass}获取参数值 --> name="Activity Name" <!-- UI 界面输入框前的提示标签值 --> type="string" <!-- 参数值类型 --> constraints="class|unique|nonempty" <!-- 参数值约束条件,这里的约束是必须是类名,惟一,非空 --> suggest="${layoutToActivity(layoutName)}" <!-- 自动提示,好比输入layout的值能够自动生成activityClass --> default="MainActivity" <!--默认值 --> help="The name of the activity class to create" /> <!-- 向导对话框底部的帮助性文字 --> <thumbs> <thumb>template_blank_activity.png</thumb> <thumb navType="none">template_blank_activity.png</thumb> <thumb navType="tabs">template_blank_activity_tabs.png</thumb> <thumb navType="tabs_pager">template_blank_activity_tabs_pager.png</thumb> <thumb navType="pager_strip">template_blank_activity_pager.png</thumb> <thumb navType="dropdown">template_blank_activity_dropdown.png</thumb> </thumbs> <globals file="globals.xml.ftl" /> <execute file="recipe.xml.ftl" /> </template>
几个重要的节点:
category节点:表示模板的类型,可选的值包括三种:
1.Applications表示Android Application Templates
2.Activities表示Android Activities Templates
3.UI Component表示Android Object Templates中那些带有试图的UI组件模板,因此相似Service这种没有界面的组件模板中就没有这个节点了。
parameter节点:定义了图形配置界面的用户输入参数项。
参数类型由parameter节点的type属性定义,常见的类型有:
string——表现为输入框
boolean——表现为勾选框
enum——表现为下拉选择框
thumbs节点:定义了静态预览图。
对照Activity向导能够很容易的知道各个节点的意思:
<globals file="globals.xml.ftl" />就是将工程定义的全局变量包含进来。
<execute file="recipe.xml.ftl" />表示开始执行模板渲染。
所以,template.xml的结构和做用能够描述为:
globals.xml.ftl
这个文件的目的只有一个,就是提供全局变量[Global Values],简单示例: android
<global id="resOut" value="res" /> <global id="menuName" value="${classToResource(activityClass)}" />其余文件中的引用方式就是${resOut}以及${menuName}等等
<?xml version="1.0"?> <recipe> <merge from="AndroidManifest.xml.ftl" /> <copy from="res/values-v14/styles_ics.xml" to="res/values-v14/styles.xml" /> <instantiate from="res/menu/main.xml.ftl" to="res/menu/${menuName}.xml" /> <open file="res/layout/${layoutName}.xml" /> </recipe>
1.咱们将全部的模板帮助提示都改为中文,在template.xml文件中,主要是修改description的属性值: app
<parameter id="activityClass" name="Activity名称" type="string" constraints="class|unique|nonempty" suggest="${layoutToActivity(layoutName)}" default="MainActivity" help="Activity的类名" />2.通常我不会直接使用android默认的titlebar,而会本身定义一个TextView来定制title,所以我但愿在向导中添加一个Page Title配置项,在template.xml添加下面的内容:
<parameter id="pageTitle" name="My Page Title" type="string" constraints="nonempty" default="默认标题" suggest="${activityClass}_page_title" help="自定义页面的标题" />
在默认的activity布局文件[能够是root/res/layout/activity_simple.xml.ftl]中添加一个TextView 框架
<TextView android:background="#ff5500" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="${pageTitle}" />3.app中会引用其余的一些库,这些库一般也会带有不少activity布局文件,为了和本身的布局文件去分开,因此我一般在本身的布局文件前面添加一个前缀,能够这么修改:
(2)分别在template.xml和recipe.xml.ftl修改相应的名称 eclipse
globals.xml.ftl ide
<global id="xe_prefix" value="xe" />recipe.xml.ftl:
<instantiate from="res/menu/main.xml.ftl" to="${resOut}/menu/${xe_prefix}_${menuName}.xml" /> <instantiate from="res/layout/activity_simple.xml.ftl" to="${resOut}/layout/${xe_prefix}_${layoutName}.xml" />
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.${xe_prefix}_${layoutName}); <#if parentActivityClass != ""> // Show the Up button in the action bar. setupActionBar(); </#if> }