自定義AndroidStudio程式碼模板
背景
我們知道,在Android開發中,官方提供了很多模板,可以直接建立成套的程式碼,很是方便開發
這種程式碼模板其實不是什麼新鮮的技術,Google其實就是把Freemarker模板引擎整合到了Android Studio中。
下面我們研究一下Android Studio的模板,並自定義兩個程式碼模板。
模板檔案淺析
我們開啟Android Studio的模板檔案,分析一下這種檔案的構成,檔案地址為..Android Studiopluginsandroidlib emplates,我們在AS中使用的模板都在這裡出現。
我們以..Android Studiopluginsandroidlib emplatesactivitiesLoginActivity為例,分析一下模板檔案是怎麼運作的
資料夾中的檔案及各檔案的作用如下:
在上圖中,出現了三種檔案,ftl、xml和png
ftl是freemarker檔案,跟模板檔案操作相關的操作都在ftl檔案中定義
xml有兩個,根目錄下的template.xml定義了我們在使用模板時顯示的介面;另一個res資料夾下的xml檔案沒有邏輯功能,將直接被複制到我們的工程中
png只有根目錄下的那個檔案,其實就顯示在我們使用模板時顯示的介面裡,作為該模板的logo使用
我們再看看根目錄下的三個檔案的檔案內容
·template.xml
template.xml定義了使用模板時的介面,我們先看LoginActivity的模板介面
我們看看template.xml如何定義這個介面
定義模板類別
定義輸入項
容易看到,每個輸入框的預設值、提示、型別等都是在xml中定義的。
需要注意的是,我們更改Activity Name時,Layout Name也會隨之更改,這是通過“suggest=”${activityToLayout(activityClass)}””實現的,其中${activityToLayout()是個函式,用於把Activity的類名XXXActivity轉換成Layout名activity_XXX;而這個函式的入參“activityClass”就是“Activity Name”這個輸入框對應的id“activityClass”。
最後是定義logo和包名
template的作用不止是定義模板的介面,事實上,通過在template裡定義的id,其他ftl檔案就可以獲取我們在介面上輸入的類名和檔名等,為自動生成檔案和程式碼提供輸入引數。
例如,在LoginActivity.java.ftl中,生成XXXActivity.java檔案時,檔案的名字,類的名字,都會根據template檔案中activityClass的值進行賦值
·globals.xml.ftl
定義一些全域性變數
如上圖所示,在globals裡定義了一個與API版本有關的boolean值,這個值將在生成LoginActivity的程式碼時,用來判斷是否要新增部分程式碼
·recipe.xml.ftl
recipe.xml.ftl用來定義如何生成程式碼和檔案
·其他模板程式碼檔案
除了根目錄下的globals.xml.ftl、recipe.xml.ftl、template.xml三個檔案,其他模板都可以根據需要自由配置。
製作自定義MVPActivity模板
模板檔案結構如下
核心就在於程式碼資料夾裡的三個檔案,分別是MVP的介面、Presenter和Activity,檔案內容分別如下:
Contract的模板檔案:
Presenter的模板檔案:
Activity的模板檔案:
在recipe.xml.ftl檔案中把這幾個檔案初始化並複製到工程中
最後,把整個資料夾複製到..Android Studiopluginsandroidlib emplatesactivities下,
重啟Android Studio
,就可以應用了
在Activity類別的模板中,多了一個Empty MVP Activity
開啟後,介面如下
我們注意到,最前面有個Biz Name的輸入引數,這個引數的作用不是生成檔案,而是為後面的檔案統一命名,因為Activity Name只能影響到Layout Name,我希望能一起設定介面和Presenter的名字,但是Freemarker沒有和${activityToLayout()這個函式對應的生成介面和Presenter名字的函式,所以我在最前面增加了這樣一個變數,專門用於統一命名。
具體在template.xml檔案中,增加了一個id為“activityName”的變數,併為後續的變數賦值,如在“activityClass”中,把suggest的值設定為”${activityName}Activity”,讓它自己拼出XXXActivity的名字。
生成的檔案結構如下
生成的Activity檔案
生成的Presenter
生成的Contract
至此,我們完成了自定義程式碼模板的編寫和使用
附錄
Android高階技術大綱,以及系統進階視訊;
圖一;Android高階技術大綱
圖二;Android進階系統資料視訊
獲取方式;
加Android進階群;701740775。即可前往免費領取。免費備註一下csdn
相關文章
- 自定義Android Studio程式碼模板Android
- 使用IntelliJ IDEA中的Live Templates自定義程式碼模板IntelliJIdea
- 自定義 Word 模板
- Xcode自定義程式碼塊XCode
- IDEA自定義註釋模板Idea
- 建立自定義專案模板
- .NET Core - 自定義專案模板
- MyBatis-Plus Generator自定義模板MyBatis
- xcode10 自定義程式碼塊XCode
- 自定義Vue-cli專案模板Vue
- VS2019 自定義專案模板
- rubymine設定自定義快捷程式碼片段
- 影片直播系統原始碼,在Laravel中自定義模板函式 並在模板中呼叫原始碼Laravel函式
- Java如何搭建腳手架(自動生成通用程式碼),建立自定義的archetype(專案模板)Java
- 如何自定義自己的vue-cli模板Vue
- Hexo 主題開發之自定義模板Hexo
- 易優cms模板在哪自定義表單
- Obsidian自定義程式碼塊樣式成Typora
- 自定義Mybatis自動生成程式碼規則MyBatis
- Iceworks 2.8.0 釋出,自定義你的 React 模板React
- OpenAPI生成器中實現自定義模板API
- Django自定義模板標籤與過濾器Django過濾器
- gitSource 自定義指令碼Git指令碼
- 自定義事件提醒程式事件
- Maven Archetype 多 Module 自定義程式碼腳手架Maven
- AndroidStudio之自定義輸出包名報錯 Cannot set the value of read-only property 'outputFile' forAndroid
- grain-Edu-Note part11 自定義模板列AI
- onethink自定義外掛 怎麼在模板裡面使用模板的繼承?繼承
- uni-app 自定義loading 自定義toast 相容小程式&APPAPPAST
- Cordova應用的JavaScript程式碼和自定義外掛程式碼的除錯JavaScript除錯
- 程式碼演示Mybatis-Generator 擴充套件自定義生成MyBatis套件
- tableau自定義地理編碼
- 《轉》Pycharm建立py檔案時自定義頭部模板PyCharm
- (五)自定義按鈕模板和設定觸發器觸發器
- AndroidStudio提交程式碼到Git上(包含GitBlit的使用)AndroidGit
- 自定義tableViewCell,程式碼入口為-initWithStyle:或者-awakeFromNib, 不能是-initWithFrame:View
- java如何讓程式碼變得優雅——自定義註解Java
- 小程式自定義元件的使用元件