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> }