編輯:關於Android編程
上篇文章介紹的方法只能創建類模板,不能創建xml文件等資源文件以及配置文件等,這篇文章來介紹創建可以一次創建多個文件多種類型文件的方法。
我們在使用AndroidStudio創建Activity的時候一般java文件,xml文件,以及在androidmanifest.xml配置文件中配置已經完成。
上篇文章講到AndroidStudio的文件模板放在安裝目錄下/plugins/Android/lib/templates 文件夾下面。
可以看到裡面那些正是AndroidStudio默認提供的Activity類型(我截圖裡面多了幾個,是我自己測試寫的)。<喎?/kf/ware/vc/" target="_blank" class="keylink">vcD4KCjxwPs/Cw+bO0sPHt9bO9tfuvPK1pbXE0ru49sSjsOVFbXB0eUFjdGl2aXR5LEVtcHR5QWN0aXZpdHnOxLz+vNDPwsPmsPzAqKO6IDxicj4KPGltZyBzcmM9"/uploadfile/Collfiles/20160530/20160530092813401.png" alt="模板文件夾內容" title="\">
Android Studio 使用的是freeMaker模板引擎,所以文件夾下面的文件後綴名都是.ftl。
globals.xml.ftl 全局變量文件 存放的是一些全局變量 recipe.xml.ftl 配置要引用的模板路徑以及生成文件的路徑 template.xml 模板的配置信息,以及要輸入的參數.定義了模板的流程框架 基本結構 template_blank_activity.png 顯示的縮略圖(只是展示用)SimpleActivity.java.ftl Activity模板文件
globals.xml.ftl 定義了一些全局變量 以及將 common_globals.xml.ftl 文件中的全局變量引入
<#include "../common/common_globals.xml.ftl" />
common_globals.xml.ftl
<#assign theme=getApplicationTheme()!{ "name": "AppTheme", "isAppCompat": true }>
<#assign themeName=theme.name!'AppTheme'>
<#assign themeNameNoActionBar=theme.nameNoActionBar!'AppTheme.NoActionBar'>
<#assign appCompat=theme.isAppCompat!false>
<#assign appCompatActivity=appCompat && (buildApi gte 22)>
<#if !appCompat>
<#elseif appCompatActivity>
<#else>
#if>
recipe.xml.ftl 、recipe_manifest.xml.ftl、recipe_simple.xml.ftl 配置要引用的模板路徑以及生成文件的路徑
<#include "../common/recipe_manifest.xml.ftl" />
<#if generateLayout>
<#include "../common/recipe_simple.xml.ftl" />
#if>
//recipe_manifest.xml.ftl
//recipe_simple.xml.ftl
<#if appCompat && !(hasDependency('com.android.support:appcompat-v7'))>
#if>
<#if (isNewProject!false) && !(excludeMenu!false)>
<#include "recipe_simple_menu.xml.ftl" />
#if>
<#include "recipe_simple_dimens.xml" />
這裡<#if >是freeMaker的if判斷標簽,對freeMaker我也不太熟悉,大家感興趣可以去看一下freeMaker語法。
這句是根據root/src/app_package/SimpleActivity.java.ftlSimpleActivity.java.ftl模板文件生成escapeXmlAttribute(srcOut)目錄下對應${activityClass}.java文件,escapeXmlAttribute(srcOut)這個是指你選擇的目錄即你點擊右鍵時的目錄。
同樣這句的作用是生成後打開這個文件。
merge標簽代表是將AndroidManifest.xml.ftl模板文件中的內容添加到AndroidManifest.xml文件中,並不是覆蓋。
template.xml 模板的配置信息,以及要輸入的參數.定義了模板的流程框架 基本結構
界面中顯示描述
模板所屬類型 這個可以自定義
界面提示文字
縮略圖
template_blank_activity.png
引入全局配置文件
根據模板生成對應的文件
下面配一張圖
SimpleActivity.java.ftl Activity模板文件
package ${packageName};
import ${superClassFqcn};
import android.os.Bundle;
public class ${activityClass} extends ${superClass} {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
<#if generateLayout>
setContentView(R.layout.${layoutName});
#if>
}
}
${activityClass} ${superClass}
其他文件中對變量的引用,都是前面定義的一些參數,一般主要出自兩個地方,一個是globals.xml 全局變量文件,第二個是template.xml 界面中定義變量。
這種根據模板生成更類似於一種文件拷貝,不會檢查語法。
上面是理論基礎。下面我們來實戰一下,順便解決一下上篇文章的問題如何生成多個文件,以及不同類型的文件。
實戰須知:
建議大家在修改之前,現將整個文件夾備份一下,免得改亂了。文件夾也不大。
**recipe.xml.ftl 配置要引用的模板路徑以及生成文件的路徑。
一次性生成多個文件,在於使用
標簽,只要寫好引用模板文件和輸出文件路徑和文件名。**
template.xml 模板的配置信息,以及要輸入的參數.定義了模板的流程框架 基本結構
template_basic_activity_fragment.png
剩下的模板資源文件就不一一列舉貼代碼了 ,這些文件大家可以根據自己的需求去自己定義。
.
效果圖:
代碼上傳到了github:
https://github.com/zhaodaizheng/AndroidTemplates
這個demo自動生成的文件,是根據我自己的框架生成的,大家本地生成後的文件肯定會出現錯誤,大家可以根據自己封裝的框架進行修改。
對FreeMarker不太了解 有錯誤的地方歡迎反饋。
新的權限獲取方式除了要求像之前版本一樣在AndroidManifest文件中靜態申請之外,應用還需根據需要請求權限,方式采用向用戶顯示一個請求權限的對話框。這些被動態申
最近我家的Wi-Fi好像接入很多不明來歷的Android設備,可是進入路由器查看後,都是類似“androidXXXXX”的設備顯示的
理解事件的分發機制,需要對View和ViewGroup事件的分發分別探討。View和ViewGroup的區別,一個View控件是指它裡面不能再包含子控件了,常見的如Tex
1.android緩存的介紹Android開發本質上就是手機和互聯網中的web服務器之間進行通信,就必然需要從服務端獲取數據,而反復通過網絡獲取數據是比較耗時的,特別是訪