1. 程式人生 > >Android Studio的Activity自定義模板介紹

Android Studio的Activity自定義模板介紹

一、Android Studio的模板所在路徑

{Android Studio}/plugins/android/lib/templates/activities
  • 自制模板若無錯誤,直接拷至此目錄下即可使用

二、最簡單的預設模板EmptyActivity介紹

0、EmptyActivity目錄結構

EmptyActivity
|- template.xml                     //建立Activity時的屬性配置
|- globals.xml.ftl                  //定義一些全域性的設定
|- recipe.xml.ftl                   //拷貝程式碼或檔案的命令
|- template_blank_activity.png      //效果圖
|- root
    |- src
        |- app_package
            |- SimpleActivity.java.ftl      //被拷貝轉化的程式碼

1、template.xml 建立Activity時的屬性配置

配置介面 (檔案寫好後在使用時的介面)

Markdown

全部內容

<?xml version="1.0"?>
<template
    format="5"
    revision="5"
    name="Empty Activity"
    minApi="9"
    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"/>

    <parameter
        id="generateLayout"
        name="Generate Layout File"
        type="boolean"
        default="true"
        help="If true, a layout file will be generated" />

    <parameter
        id="layoutName"
        name="Layout Name"
        type="string"
        constraints="layout|unique|nonempty"
        suggest="${activityToLayout(activityClass)}"
        default="activity_main"
        visibility="generateLayout"
        help="The name of the layout to create for the activity" />

    <parameter
        id="isLauncher"
        name="Launcher Activity"
        type="boolean"
        default="false"
        help="If true, this activity will have a CATEGORY_LAUNCHER intent filter, making it visible in the launcher" />

    <parameter
        id="backwardsCompatibility"
        name="Backwards Compatibility (AppCompat)"
        type="boolean"
        default="true"
        help="If false, this activity base class will be Activity instead of AppCompatActivity" />

    <parameter
        id="packageName"
        name="Package name"
        type="string"
        constraints="package"
        default="com.mycompany.myapp" />

    <!-- 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 /> 的 name 是AS建立Activity,選擇模板時顯示的名字;其他屬性可直觀看出,如最低可選擇該模板的工程API版本。
  • 每個 < parameter /> 都對應於配置介面的一項屬性選擇,如activityClass(Activity的名字)、generateLayout(是否生成layout檔案)等等。

    <!-- id             唯一標識 -->
    <!-- name           label提示語 -->
    <!-- type           輸入值型別 -->
    <!-- constraints    填寫值的約束 -->
    <!-- suggest        建議值 -->
    <!-- default        預設值 -->
    <!-- help           提示語 -->
    
  • < thumbs /> 設定 效果圖

  • < globals /> 設定 全域性設定檔案
  • < execute /> 執行 命令檔案

2、globals.xml.ftl 用於定義一些全域性的設定

<?xml version="1.0"?>
<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>
  • include 是指將目標檔案中的程式碼也包含進來,如本例中包含進了通用全域性設定檔案
  • ${layoutName} 是變數名,定義於“template.xml”中的 < parameter />

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>
  • instantiate : 將ftl轉化為java檔案,並放置到目標目錄。中間會通過一個步驟,將ftl中的變數都換成對應的值,那麼完整的流程是ftl->freemarker process -> java。
  • open : 在程式碼生成後,開啟指定的檔案,比如我們新建一個Activity後,預設就會將該Activity開啟。

include 的程式碼中包含:

  • copy : 將原始檔複製到目標目錄,比如我們的模板Activity需要使用一些圖示,那麼可能就需要使用copy標籤將這些圖示拷貝到我們的專案對應資料夾。
  • merge : 合併源文 件和目標文 件,如將模板中的strings.xml合併到專案中的stirngs.xml。

4、SimpleActivity.java.ftl 將被轉化的Activity程式碼(.java複製,.ftl轉化)

package ${packageName};

import ${superClassFqcn};
import android.os.Bundle;
<#if includeCppSupport!false>
import android.widget.TextView;
</#if>

public class ${activityClass} extends ${superClass} {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
<#if generateLayout>
        setContentView(R.layout.${layoutName});
</#if>
<#include "../../../../common/jni_code_usage.java.ftl">
    }
<#include "../../../../common/jni_code_snippet.java.ftl">
}

相關推薦

Android Studio的Activity定義模板介紹

一、Android Studio的模板所在路徑 {Android Studio}/plugins/android/lib/templates/activities 自制模板若無錯誤,直接拷至此目錄下即可使用 二、最簡單的預設模板EmptyActi

Android Studio 定義模板

前言 在開發 Android 專案的過程中,難免會遇到重複編寫同一段邏輯的程式碼的情況,就拿目前比較流行的 MVP 模式來舉例好了,要實現一個頁面的 MVP 開發,我們需要編寫以下的類: 一個 MVP 的契約介面,裡面有一個 view 層介面 和 P 層的介面(或抽象類)

Android基礎控制元件——ProgressBar定義介紹、動畫效果實現、附加三個漂亮的進度條

ProgressBar自定義的介紹、動畫效果實現、附加三個漂亮的進度條 shape屬性介紹: corners 圓角   gradient 漸變   padding 內容離邊界距離   size 大小   solid 填充顏色   stroke 描邊 gradien

Android中attr定義標籤介紹

第二行是自定義標籤。 格式如上,其中“xmlns:wen”冒號後面是標籤名,在下面使用時(只對當前檔案可用) <TextView  wen:屬性名/> “com.iteye.googlers”是你的工程包名。 1. reference:參考某一資源ID。     (1)屬性

Android Studio定義萬能註釋模板與建立類,方法註釋模板

程式碼的註釋是我們平時必須面對的問題,今天我們就來看看如何自定義屬於自己的註釋模板。提高我們的開發效率。 這裡,我們講解兩種自定義模板。 1.新建的類自動生成的註釋; 2.自定義註釋模板。 新建類自動生成的註釋 1.開啟相應的設定: Fi

Android Studio定義配置註釋模板

我的簡書:簡書 在開發過程避免不了為程式碼添加註釋,為了註釋統一化,經常需要配置一些模板,所以這篇文章就記錄一下如何在Android Studio自定義註釋模板。 1、File –> Set

Android Studio 定義設定註釋模板

一、.註釋模板說明 在專案中常用的註釋模板有三種:類註釋、方法註釋、成員變數註釋,一般為了書寫程式碼方便、快捷,需要設定類註釋模板和方法註釋模板,成員變數註釋模板可根據個人需求進行設定。 注:對於剛開始使用Android Studio 的新手,設定註釋模板是必須得,但

Android studio 定義註釋模板

    快捷鍵     Ctrl+/:當行註釋,反註釋再按一次即可     Ctrl+Shift+/:模組註釋,取消註釋再按一次即可,注意這邊的”/“不能用小鍵盤的     自定義註釋模板     File ->     Setting ->     Edito

Bootstrap Blazor 元件介紹 Table (二)定義模板列功能介紹

Bootstrap Blazor 是一套企業級 UI 元件庫,適配移動端支援各種主流瀏覽器,已經在多個交付專案中使用。通過本套元件可以大大縮短開發週期,節約開發成本。目前已經開發、封裝了 70 多個元件,歡迎有興趣的同學試用。 Gitee 開源地址為:https://gitee.com/LongbowEnt

Android RatingBar 定義樣式

android style Android RatingBar 自定義樣式1.先定義Style:<style name="RadingStyle" parent="@android:style/Widget.RatingBar"> <!-- 定義星星圖片 -->

前端學PHP之定義模板引擎

php什麽是網站模板?準確地說,是指網站頁面模板,即每個頁面僅是一個板式,包括結構、樣式和頁面布局,是創建網頁內容的樣板,也可以理解為已有的網頁框架。可以將模板中原有的內容替換成從服務器端數據庫中動態內容,目的是可以保持頁面風格一致  PHP是一種HTML內嵌式的在服務器端執行的腳本語言,所以大部分PHP開發

Android Gradle 定義任務執行命令行

andro blog tasks type mman 執行 adl col command tasks.create("name": "testAssemble", "type": Exec) { workingDir "../" commandLin

webpack 的htmlwebpackplugin使用定義模板

支持 不同的 ef6 blog mon lang rul 自定義 mod   htmlwebpackplugin這個插件可以用來生成靜態的html文件。默認內部是通過後臺來生成一個html的文件。當然也可以自己使用自己的文件來生成模板。可以支持.html文件。也可以使用其他

Android PullToRrefresh 定義下拉刷新動畫 (listview、scrollview等)

appear ram nal ima cas 創建 protect tom inter PullToRefreshScrollView 自定義下拉刷新動畫,只需改一處。 以下部分轉載自http://blog.csdn.net/superjunjin/article/

django 定義模板過濾器

django 自定義過濾器參考:http://www.cnblogs.com/qwj-sysu/p/4246605.html做的頁面,一個tr裏有兩個td, 1、3、5等奇數數據要放在第一個td, 2、4、6等偶數數據要放在第二個td, (如果已經沒有數據,td 內容要為空), 所以要根據取余數的結果來判斷;

Android studio 定義打包apk名

roi fault targe test 包名 如果 nts time css Android Studio打包應用默認生成的apk名稱是:app-release.apk 、如果我們要讓生成的apk名跟我們版本包名有聯系的話,那我們就要自定義生成的apk名了 需要在bui

定義模板語言整合

routes bing ret custom mod url mar == hand   這篇文章主要對比一下兩大框架Tornado和Django自定義模塊語言,以及對Tornado的自定義模塊語言進行一個分離整合   首先我們先看一下在Tornado裏,我怎麽實現的自定義

Android Gradle 定義Task 詳解

png 發布 我們 批處理 使用總結 實用 shift fonts 博客 轉載請標明出處:http://blog.csdn.net/zhaoyanjun6/article/details/76408024 本文出自【趙彥軍的博客】 一:Gradle 是什麽 Gradl

定義模板方法(類似django中的simple_tag) | Tornado

escape print eth pos pla html 文件 ngs mbed # 自定義模板方法|相當於django中的simple_tag以及filter; # 1.uimethods.py def tag_one(self): print

zabbix的主動模式和被動模式、添加監控主機、添加定義模板、處理圖形中的亂碼、自動發現

roo 清理 瀏覽器 間隔 原型 fin 監測 9.png sim 主動模式和被動模式 主動或者被動是相對客戶端來講的 被動模式,服務端會主動連接客戶端獲取監控項目數據,客戶端被動地接受連接,並把監控信息傳遞給服務端 主動模式,客戶端會主動把監控數據匯報給服務端,服務