Android Studio自定義Activity代碼模板

Android開發中經常碰到創建Activity,Android Studio本身自帶了幾個模板,創建的時候可以看到:
Android Studio自帶的模板

但未必符合我們需要的模板樣式,所以我們要自定義代碼模板。

舉例自定義MVPActivity模板:
MVPActivity

點擊界面后看到的界面如下:
自定義模板舉例
可以看到其中標記的部分都是自定義的,其中通過MVP Name來為后面的Activity、布局文件、Contract、Model和Presenter統一命名,由Generate MVP File選擇框決定是否在生成activity的同時生成Contract、Model和Presenter等Java類。
點擊完成后模板如下:
image.png

對應的文件分別如下:


HomeActivity
HomeContract
HomeModel
HomePresenter

以上代碼都是自動生成的,是不是很方便?
注:每個人心中的MVP模式或許都有些差異,我習慣這樣寫,如有不足還請指正。

下面開始講解自定義模板步驟:

1.Android studio自帶的模板存在于AndroidStudio.app/Contents/plugins/android/lib/templates/activities文件夾下,里面可以看到有很多我們熟悉的activity模板了:
自帶模板

在寫自定義模板之前我們需要分析一下一個模板的文件結構和用法,之后可以照貓畫虎寫出我們需要的模板來。

2.就以比較簡單的EmptyActivity來分析:
EmptyActivity目錄結構
可以看到每一個模板存在于root文件夾下,其中:
src:代碼文件
globals.xml.ftl:可存儲全局變量以供其他模板文件統一引用,.ftl文件是freemarker模板引擎,它是一個Java類庫,主要用于創建模板。

recipe.xml.ftl:用于組合生成我們實際需要的代碼文件和布局文件等。
template.xml:相當于Android中的布局文件,用于提供參數,布局等。
下面一一打開文件進行簡單介紹:


globals.xml.ftl
globals文件中可以看到每一個變量的定義形式,id作為唯一標識,type標識變量類型,value表示變量值。
recipe.xml.ftl
recipe.xml.ftl文件即使不懂freemarker引擎應該也可以大概看懂,instantiate標簽用于將.ftl文件轉換成實際的Java類文件,open標簽用于在轉換完成時在項目中對應的包下生成該Activity文件。
這里if判斷可以輕松看出是根據用戶選擇生成的文件類型來生成Java文件或者kotlin文件,即
template.xml
template.xml
image.png

template.xml文件就是模板界面了,主要由parameter標簽獲取用戶輸入的參數:
id:唯一標識符,也用于其他文件變量查找引用
name:該標簽的名稱,同時將展示給用戶
type:參數類型,如boolean 、string等


模板界面

對應的代碼

很類似Android寫布局文件的形式吧!每個parameter標簽就相當于一個控件,這樣就好理解了。

3.定義MVPActivity代碼模板
經過以上簡單介紹基本足夠我們寫自定義模板了,雨里霧里的童鞋們可以再打開其他模板研究一下,加深印象。
首先創建MVPActivity文件夾:


image.png

從EmptyActivity模板中將所有文件復制進來,并根據自己的需求添加如下文件
image.png

其中每個文件代碼如下:
IContract.java.ftl
Model.java.ftl
Presenter.java.ftl
MVPActivity.java.ftl

編輯好Java文件后,根據自己的需要編輯template.xml文件來自定義界面,還是不會編輯界面的童鞋可以仿照其他界面代碼研究一下。

接下來是編輯內聯規則,如下圖:
內聯規則

需要注意的是箭頭標記的地方,這里根據模板生成Java文件的時候我們希望文件名字是創建的時候已經命名好的,因此這里要引用template.xml文件中各自控件的變量id:


template.xml
這樣生成的Java文件名字就可以按照創建Activity時輸入的名字來統一命名。這里我在第一個輸入項單獨寫了一個控件來統一命名:
image.png
它的id為activityName:
activityName
要想使用它來統一命名就要通過suggest屬性統一引用它的id:
template.xml

${ID名}為變量前綴,后面可以加上Contract,Model,Presenter等自己想要的后綴名。

提示兩點:

(1).回到內聯文件recipe.xml.ftl中,內聯的順序在代碼中是從上往下執行的,因此要想生成文件后焦點窗口定位在新的Activity內,則要把Activity的內聯代碼放在最下面:
recipe.xml.ftl
這樣所有文件生成完畢后才會優先定位到Activity窗口:
image

(2). .java.ftl模板文件中命名需要使用變量,如IContract.java.ftl文件中:
image.png
此處的contractName就是template.xml文件中的控件id:
template.xml
,每個文件中變量名與template.xml中的id對應上才能實現統一命名。

4.以上步驟都做完以后編碼部分就完成了,最后需要把整個MVP Activity文件夾都復制到/Applications/Android Studio.app/Contents/plugins/android/lib/templates/activities目錄下即可:
image.png

5.重啟Android Studio,打開Activity模板就能看見自定義的模板了:
image.png

注意,若編碼的時候出現語法錯誤,那么在Android studio中點擊finish生成Activity的時候會直接報錯,查看點擊log可以看到詳細的報錯位置,自己再進行修改就可以了。

最近發現了一款編輯模板的插件,使用起來可以更方便些:https://puke3615.github.io/2017/03/06/TemplateBuilder[Chinese]/
最后附上模板文件:activity模板下載地址

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容