AndroidStudio 模板编写

效果

template

- 学习LoginActivity模板

首先我们打开studio安装目录找到系统原生模板,D:\Program Files\Android\studio\plugins\android\lib\templates\activities 这个是我的安装目录,在这里我们可以看到很多原生模板代码可以参考及借鉴,下面我们举例将LoginActivitysublimeText打开,如果本地没有请自行下载
LoginActivity原生系统模板
在这里我们可以看到root文件下存放的是ressrc两个文件夹对应的就是我们在开发时的目录这里不过多解释,

  1. global:里面存放的是全局变量
  2. recipe:这个文件会去获取template文件的id然后去创建相对应模板
  3. template:给使用模板用户所看到的页面
- 自己编写一个简单mvp模板
  • 首先我们去创建一个模板名称为mvp,接着打开template文件我们设置下namedescription模板
<template
        format="5"
        revision="1"
        name="Mvp"
        description="第一个插件模板的诞生之路1">

    <category value="Activity"/>
    <formfactor value="Mobile"/>
</template>

这时在通过studio工具查看模板就会发现刚才自定义模板已经生成了可以在studio->new->Activity中查看到。

  • 下面我们创建MvpLoginActivity的模板,打开template.xml
    template
    <parameter
            id="activityClass"
            name="Activity Name"
            type="string"
            constraints="class|nonempty"
            help="hexl 测试模板 Activity"/>
  • 打开recipe.xml.ftl文件
<#-- 创建一个实例
    from:从指定路径下引入该模板文件,相关模板代码都将在该文件中创建
    to:输出到指定的目录
       mvpPath、 相当于变量,该变量在global文件中进行定义
 -->
        <instantiate from="root\src\app_package\LoginActivity.java.ftl"
                     to="${mvpPath}ui/activity/${activityClass}Activity.java"/>

    <#-- 打开创建的文件 -->
        <open file="${mvpPath}ui/activity/${activityClass}Activity.java"/>

recipe
在这里我们看到有两个变量分别是mvpPathactivityClass两个变量,mvpPathglobals.xml.ftl定义global1

    <global id="mvpPath" type="string" value="${escapeXmlAttribute(srcOut)}/mvp/"/>

activityClass就是引用template.xml定义的activity ID

  • PresenterModel 都是一样的代码可以创建出来,这里不再展示章尾会给出源码
- 类名与Layout联动
- Activity和Layout名称联动

我们要实现输入类名时布局名称也随之联动,主要看下suggest这个参数
layout

    <!-- 创建布局 -->
    <parameter
            id="layoutActivityClass"
            name="Activity Layout"
            constraints="layout|nonempty"
            default="activity_main"
            suggest="${activityToLayout(activityClass)}"
            help="hexl 测试模板 Layout"/>
- Fragment和Layout名称联动

fragment

    <!-- 创建Fragment -->
    <parameter
            id="fragmentClass"
            name="Fragment Name"
            type="string"
            constraints="class|nonempty"
            help="hexl 测试模板 Fragment"/>

fragmentLayout

    <!-- 创建布局
        Fragment 布局名称联动与Activity 不一样,需要特别注意
    -->
    <parameter
            id="layoutFragmentClass"
            name="Fragment Layout"
            constraints="layout|nonempty"
            default="fragment_main"
            suggest="fragment_${classToResource(fragmentClass)}"
            help="hexl 测试模板 Layout"/>
- Adapter和itemLayout名称联动

adapter

    <parameter
            id="adapterClass"
            name="Adapter Name"
            type="string"
            constraints="class|nonempty"
            help="Adapter 将被输出到 package.adapter 下"/>

item

    <!--
        adapter item 名称联动与fragment和activity都不一样
        规范是 item_$小写adapterClass
    -->
    <parameter
            id="adapterLayoutClass"
            name="Adapter Layout Name"
            type="string"
            suggest="item_${extractLetters(commonName?lower_case)}"
            constraints="class|nonempty"
            visibility="needAdapterLayout"
            help="AdapterLayout 布局文件将被输出到 res/layouts/items/ 下"/>

这里用到了commonName,所以我们要在template定义出来
commonName

    <!-- 公共名称 -->
    <parameter
            id="commonName"
            name="Common Name"
            type="string"
            constraints="nonempty"
            help="公共名称,作为所有页面的前缀"
            default="Hexl"/>

adapter

<instantiate from="root/src/app_package/LoginAdapter.java.ftl"
                     to="${mvpPath}/adapter/${commonName}Adapter.java"/>

创建layout布局文件
adapterLayout

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

这里引入了一个simple.xml.ftl文件其实很简单,只要在root->res->layout目录下进行声明就ok了
simple

- 生成不同级别目录

例如我们将adapter放到与mvp同一级别目录下,而不是在mvp目录下我们该如何进行骚操作呢?
首先我们在global.xml.ftl文件中定义个变量global

    <global id="adapterPath" type="string" value="${escapeXmlAttribute(srcOut)}/adapter/"/>

然后修改recipe.xml.ftl文件输出的目录

<instantiate from="root/src/app_package/LoginAdapter.java.ftl"
                     to="${adapterPath}/${commonName}Adapter.java"/>

下载源码的地址:

GitHub地址
码云地址

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值