Android Template使用

2017-03-04  本文已影响195人  null_null

Android Template使用

由于在项目中使用了Mvp+Dagger的模式进行开发,在实际使用中针对一个页面需要建六七个页面,而这里面很多代码是重复性的,所以考虑要使用Template来提高工作效率


参考文章:

具体的使用方法在上面的文章中已经有了讲解,我这里就记录一下自己的使用经过。

AndroidStudio提供的有多种模版,位置在

{AndroidStudio安装目录}/plugins/android/lib/templates/

对应到我的机器上是:

/Users/xxx/Applications/Android Studio.app/Contents/plugins/android/lib/templates/activities/

这个目录下有As自己预设好的各种模版,我们在 new-> activity->BasicActivity操作的时候使用的就是这里的预设模版。

我们需要做的是把我们自己写好的模版(Mvp Activity)放到这个目录的/activitys目录下,重启AndroidStudio。就可以在new->activity->Mvp Activity中使用我们自己写的模版了。

template1.jpeg

通过对预设模版的分析,发现目录结构如下:

template2.jpeg

root/res root/src

root/res以及root/src目录下放置我们的资源文件以及源代码文件,对应我们开发时项目目录结构下的res目录和src目录,res里面有values layout等文件夹,资源文件可以通过recipe里的merge命令合并到我们项目中的res目录下。源代码文件通过instantiate命令重命名并迁移到对应目录下。这里的所有文件后缀名都是ftl。

#TempMvpActivity.java.ftl
package ${packageName};

/**
 * @author lsp
 * @created 17/3/3 16:38
 */
public class ${activityClass}Activity extends Activity{
  
}

打开我们的一个activity文件,其中代码部分跟我们自己写的activity是一样的,只是需要替换掉的部分用变量替换掉就可以在通过模版生成代码时候自动读取变量生成对应的文件以及代码了。

globals.xml.ftl

globals文件是用来定义全局变量以及引入系统预设全局变量的

#globals.xml.ftl
<?xml version="1.0"?>
<globals>
    <global id="hasNoActionBar" type="boolean" value="false" />
    <#include "../common/common_globals.xml.ftl" />
</globals>

我们也可以自己在这里定义我们需要的变量,然后通过$(hasNoActionBar)这样的方式来进行调用。
include的通用目录在

/Applications/Android Studio.app/Contents/plugins/android/lib/templates/activities/common

recipe.xml.ftl

recipe文件是用来实际操作生成模版的,他包含了一系列操作标签:

#recipe.xml.ftl
<?xml version="1.0"?>
<recipe>
    <#include "recipe_manifest.xml.ftl" />

    //把string合并到项目中的strings中
        <merge from ="root/res/values/strings.xml.ftl"
                to="${escapeXmlAttribute(resOut)}/values/strings.xml"/>

    //合并代码
    <instantiate from = "root/src/TempMvpActivity.java.ftl"
                 to ="${escapeXmlAttribute(srcOut)}/${activityClass}Activity.java"/>

    <instantiate from = "root/src/TempMvpComponent.java.ftl"
                     to ="${escapeXmlAttribute(srcOut)}/${activityClass}Component.java"/>

    <instantiate from = "root/src/TempMvpFragment.java.ftl"
                     to ="${escapeXmlAttribute(srcOut)}/${activityClass}Fragment.java"/>

    <instantiate from = "root/src/TempMvpModule.java.ftl"
                         to ="${escapeXmlAttribute(srcOut)}/${activityClass}Module.java"/>

    <instantiate from = "root/src/TempMvpPresenter.java.ftl"
                         to ="${escapeXmlAttribute(srcOut)}/${activityClass}Presenter.java"/>

    <instantiate from = "root/src/TempMvpView.java.ftl"
                         to ="${escapeXmlAttribute(srcOut)}/${activityClass}View.java"/>


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

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

    //打开指定文件
    <open file="${escapeXmlAttribute(srcOut)}/${activityClass}Activity.java" />

</recipe>

上面这个是我生成模版用的,里面包含的标签如下:

<copy from="root/res/drawable-hdpi"
to="${escapeXmlAttribute(resOut)}/drawable-hdpi" />

这个操作符可以把我们模版里的资源文件复制到对应的项目资源目录下

<merge from ="root/res/values/strings.xml.ftl"
to="${escapeXmlAttribute(resOut)}/values/strings.xml"/>

我们可以通过这个操作符对资源文件进行合并,比如strings,AndroidManifest文件等。

<instantiate from = "root/src/TempMvpPresenter.java.ftl"
 to ="${escapeXmlAttribute(srcOut)}/${activityClass}Presenter.java"/>

这个操作符很常用到,是用来把我们的ftl文件进行一系列处理(变量替换,文件名重命名,去掉ftl后缀)并copy到指定的位置。这个是生成我们模版文件以及代码的主要操作。(freemarker)

<open file="${escapeXmlAttribute(srcOut)}/${activityClass}Activity.java" />

在代码生成后,打开指定的文件

template.xml

这个文件是用来定义新建时候的输入项的。

template3.jpeg
<parameter
      id="activityClass"
      name="Activity Name"
      type="string"
      constraints="class|unique|nonempty"
      suggest="${layoutToActivity(activityLayoutName)}"
      default="MvpActivity"
      help="The name of the activity class to create"/>

这个文件里定义的每一项都会在新建时候展示出来让使用者输入或者选择。然后对应的变量会在生成模版时候使用。

freemarker

在我们编写模版时候使用到的freemarker,可以通过以下文章进行了解

坑点

总体来说模版的编写还是很简单的。想要的功能大多可以在预设模版中找到。把需要使用的功能从预设模版中copy过来修改就可以了。

上一篇下一篇

猜你喜欢

热点阅读