Android Studio 輕松構建自定義模板

前言

之前其實有從鴻洋的文章有了解過AS的模板開發(fā),一直想做一些自己經(jīng)常使用的模板,以減少重復代碼工作,但是發(fā)現(xiàn)太費勁了,所以一直擱置。然后昨天無意中發(fā)現(xiàn)了這個插件TemplateBuilder,然后學習了一下,基本掌握了這個插件的使用,以及快速構建自己的模板。下面來分享一下。

一、TempateBuilder插件安裝

環(huán)境:Android Studio 3.1.1

  • 方式1:AS內(nèi)安裝

安裝完后記得要重啟AS才能生效!?。?/strong>

二、建立自定義模板

以創(chuàng)建TestActivity模板為例。

1. 創(chuàng)建模板所需文件

按照平時的Activity,及Layout文件位置來創(chuàng)建把。(其實也可以隨便找個位置創(chuàng)建以下的模板文件)
Java模板文件:TestSampleActivity.java

package ${packageName};

import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.TextView;

public class ${testName}Activity extends AppCompatActivity {

  private TextView mTvLog;

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_${layoutName});
    mTvLog = findViewById(R.id.tv_log);
  }

  public void on${testName}(View view) {

  }

  private void log(String log) {
    StringBuilder sb = new StringBuilder();
    String s = mTvLog.getText().toString();
    sb.append(s).append("\n").append(log);
    mTvLog.setText(sb.toString());
  }

  public static void start(Context context) {
    Intent starter = new Intent(context,  ${testName}Activity.class);
    context.startActivity(starter);
  }
}

XML模板文件:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".${testName}Activity"
    >

  <Button
      android:id="@+id/btn_${testName}"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:onClick="on${testName}"
      android:text="${testName}"
      android:textAllCaps="false"
      />

  <ScrollView
      android:layout_width="match_parent"
      android:layout_height="match_parent"
      >
    <TextView
        android:id="@+id/tv_log"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        tools:text="Log"
        />
  </ScrollView>


</LinearLayout>

2. 選中模板文件TestSampleActivity.java及activity_test_sample.xml

3. 使用快捷鍵Alt+T,調出生成窗口,并填寫相關信息,及Add添加模板所使用的相關變量(如${testName})定義


下面來說明一下該界面對應的內(nèi)容

  • Template Category 對應模板的分類,對應選擇導入模板時的模板分類,比如AS原本就有的Activity分類(我們經(jīng)常在這個分類里面使用EmptyActivity),這里默認值是電腦的用戶名。
  • Template Name 對應模板名稱,對應選擇導入模板時的模板名稱,默認值是當前的Module名稱。
  • Template Description 對應模板描述信息,對應導入模板時彈出的導入界面的文字描述,默認為空。
  • Template Folder 對應生成模板所存放的位置,如果是Mac操作系統(tǒng)則默認為/Applications/Android Studio.app/Contents/plugins/android/lib/templates, Windows系統(tǒng)的話由于差異比較大,就默認為空了,可以自行配置[Android Studio安裝目錄]/plugins/android/lib/templates(這里只需要配置一次即可,插件將自動保存該位置)。
  • Input data區(qū)域
    關于Input data的使用,先解釋下每個屬性對應的含義
    id 變量名,必須和模板中使用的變量名對應,必填,比如上面模板文件中使用${testName},這里就應該填上對應的名稱,testName
    name 變量簡介,必填
    type 變量類型,string和boolean兩種,通過下拉框選擇,必填
    default 變量對應的默認值,選填
    help 添加該變量時的提示信息,選填

注意:不要使用中文,因為編碼問題所以使用中文會變成亂碼

4.點擊 Next 要進入更詳細的配置

  • recipe.xml.ftl配置


    原內(nèi)容

from是模板文件路徑,to是要生成的文件路徑,如果不修改,默認文件名,就是跟原來的模板文件名一樣。我們需要文件名也一同重新命名,所以要修改一下,調整為如下配置

<?xml version="1.0"?>
<recipe>

    <instantiate from="root/src/app_package/TestSampleActivity.java.ftl"
        to="${escapeXmlAttribute(srcOut)}/${testName}Activity.java" />

    <instantiate from="root/res/layout/activity_test_sample.xml.ftl"
        to="${escapeXmlAttribute(resOut)}/layout/activity_${layoutName}.xml" />

    <merge from="root/AndroidManifest.xml.ftl"
           to="${escapeXmlAttribute(manifestOut)}/AndroidManifest.xml" />

    
</recipe>
  • AndroidManifest.xml.ftl 配置


    原內(nèi)容

    從 recipe.xml.ftl配置中,我們就已經(jīng)發(fā)現(xiàn),其實AndroidManifest.xml的生成,是使用merge的方式,也就是跟Git的合并一樣,而這里的模板顯然已經(jīng)不適用,所以需要對應調整為當前新的模板類型。

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="${packageName}">

    <application>
        <activity android:name="${packageName}.${testName}Activity"/>
    </application>
</manifest>
  • 其他的
    template.xml,是控制創(chuàng)建時候的ui面板配置的,像在上一步中填寫的,名稱,默認值,類型等最終都是生成在這個文件中,當某項配置出錯時,可以根據(jù)需要做調整,不用每次都Alt+T新建模板。
    build.gradle.ftl,是添加依賴使用的,我們沒有用到,所以不需要配置。
    globals.xml.ftl,是全局一些配置,比如resOut是指定資源輸出文件夾。默認就ok了。

5. 點擊ok,生成成功,會在底部有提示,重啟AS后才生效。

三、使用

跟平常的新建EmptyActivity一樣操作,我們選擇我們剛剛創(chuàng)建的模板。




四、舉一反三

通過上面步驟,已經(jīng)成功創(chuàng)建了一個快速測試的Activity模板。
最終模板生成的文件所在的位置是Alt+T時候配置的路徑,C:\Android\Studio\plugins\android\lib\templates,在這里也可以看到AS內(nèi)置的模板,比如在C:\Android\Studio\plugins\android\lib\templates\activities\EmptyActivity里面的EmptyActivity模板。
同時可以參考內(nèi)置模板的,template.xml、recipe.xml.ftl、globals.xml.ftl,及root\src下的模板文件,來找到自己需要的配置,比如創(chuàng)建文件之后,打開我們Activity.java文件。在recipe.xml.ftl文件中,加入命令
<open file="${escapeXmlAttribute(srcOut)}/${testName}Activity.java" />
還有其他的,如替換縮略圖之類。

最后

介紹這個控件的文章非常少,我也只找到一篇。作者原介紹,和那一篇文章,都有點零散把,有些地方也不是很清楚,最后經(jīng)過自己的實踐,重新認識了如何自定義模板。最后還是非常感謝該插件作者。
參考:

http://www.itdecent.cn/p/e3548f441440
GitHub

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容