1.概述
最近有很多人反饋壮韭,有些哥們不喜歡看文字性的東西憨颠,還有一些哥們根本就不知道我在搞啥子胖翰,那么以后我就采用博客加視頻的方式帕膜,我們可以選擇看視頻講解:http://pan.baidu.com/s/1i5uh2uD
內(nèi)涵段子項目資料及源碼地址:https://ke.qq.com/course/193277#tuin=e533cfc
大家不要被我的演示忽悠了,我手機(jī)上面的確有兩個內(nèi)涵段子的apk,接口也是內(nèi)涵段子的接口,接口和素材待會在源碼里面發(fā)給大家拦宣,但是所演示的是我自己寫的截粗。這里主要是講信姓,怎么去自定義我們的Android Studio 模板
如果你到目前還不知道我在哪個碼頭,請先看看這里绸罗,利用自定義模板分分鐘開發(fā)一個頁面:http://blog.csdn.net/z240336124/article/details/53053765
2.實現(xiàn)
2.1. IDE中模板的文件結(jié)構(gòu)
我們首先來參考一下IDE中自帶的模板文件結(jié)構(gòu)意推,我們Android Studio 的模板都放在 安裝目錄下\plugins\android\lib\templates\activities
上圖都是我工程目錄下的模板,至于效果請看前篇講解珊蟀,那么在Android Studio中最簡單的activity模板就是:Empty Activity了菊值,我們打開該模板文件,首先對文件結(jié)構(gòu)有個直觀的了解育灸,請看圖:
那么接下來就對這些文件及里面的語法逐個介紹:
2.1.1. template.xml
<?xml version="1.0"?>
<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" />
<!-- .....此處省略幾行無關(guān)緊要代碼...... -->
<!-- 128x128 thumbnails relative to template.xml -->
<thumbs>
<!-- default thumbnail is required -->
<thumb>template_blank_activity.png</thumb>
</thumbs>
<globals file="globals.xml.ftl" />
<execute file="recipe.xml.ftl" />
</template>
這里其實可以不做過多解釋俊性,對著新建模板的樣式看一下大概就可以理解了:
這個都是和 template.xml 對應(yīng)的基本最多的是我標(biāo)出來的parapmeter部分,下面來解釋一下每個字段的含義
id :唯一標(biāo)識描扯,最終會通過它獲取字符串 是否選中等等
name:界面上的左邊的提示語
type : 輸入值類型 可以是string int boolean 等等
constraints:填寫值的約束 如文件名不能重復(fù)等等
suggest:建議值定页,比如填寫ActivityName的時候,會給出一個布局文件的建議值绽诚。
default:默認(rèn)值
help:顯示的幫助提升語
2.1.2 globals.xml.ftl
這個其實沒什么好看的 就一些id對應(yīng)的初始值而已:
<globals>
<global id="hasNoActionBar" type="boolean" value="false" />
<global id="parentActivityClass" value="" />
<global id="simpleLayoutName" value="${layoutName}" />
<global id="excludeMenu" type="boolean" value="true" />
<global id="generateActivityTitle" type="boolean" value="false" />
<#include "../common/common_globals.xml.ftl" />
</globals>
**2.1.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>
這個需要重點介紹一下了典徊,待會一新建會自動生成什么文件,或是生成什么代碼都是靠它來指定:
copy :從root中copy文件到我們的目標(biāo)目錄恩够,比如我們的模板Activity需要使用一些圖標(biāo)卒落,那么可能就需要使用copy標(biāo)簽將這些圖標(biāo)拷貝到我們的項目對應(yīng)文件夾。
merge : 合并的意思蜂桶,比如將我們使用到的strings.xml合并到我們的項目的stirngs.xml中
instantiate : 和copy類似儡毕,但是可以看到上例試將ftl->java文件的,也就是說中間會通過一個步驟扑媚,會生成root下面對應(yīng)的代碼腰湾,也就是說你待會root下面的Activity寫了什么就會生成什么
open:在代碼生成后,打開指定的文件疆股,比如我們新建一個Activity后费坊,默認(rèn)就會將該Activity打開。
**2.1.4 ** freemarker語法
我們可以看到這個 <#if generateLayout> ... 這個其實也是一種語法旬痹,我們寫過程序基本就知道是什么意思附井,我們看看 root/src/app_package下面的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);
// 這個我們大概還記得是一個可以勾選的參數(shù) 這里就用了if語法
<#if generateLayout>
setContentView(R.layout.${layoutName});
</#if>
}
}
3. 小結(jié)
那么現(xiàn)在我們就知道IDE的模板結(jié)構(gòu)以及格式了,那么我們就可以自定義了:
- template.xml:他就是用來指定我們的參數(shù)两残,就是供用戶選擇和自定義
- globals.xml.ftl : 它就是用來初始化一些參數(shù)永毅,比如需不需要ActionBar 等等
- recipe.xml.ftl : 它就是用來應(yīng)用我們root文件夾下的資源,哪些需要copy哪些需要合并打開等等
- root文件夾 存放對應(yīng)源碼的ftl文件人弓,以及資源文件沼死,待會生成的代碼都會該文件夾下的一樣
3. 開始擼代碼
在這里估計我基本寫不清楚了,這個不是三言兩語為成功干杯的事票从,那么這個自己錄個視頻講解:http://pan.baidu.com/s/1i5uh2uD視頻中不光講了自定義開發(fā)模板還講了一些其他的漫雕。大家也可以自己開始嘗試著去寫了,源碼和素材請在下面下載峰鄙。
附源碼地址:http://download.csdn.net/detail/z240336124/9674377
內(nèi)涵段子項目資料及源碼地址:https://ke.qq.com/course/193277#tuin=e533cfc