简介

Android Studio Template 依靠 FreeMarker 引擎,将事先定义好的模板文件生成我们所需的 class 文件、layout 文件等等,可以极大减少样板式代码的编写。

模板位置,Windows 的路径在 /plugins/android/lib/templates/,Mac 下是 Android Studio.app/Contents/plugins/android/lib/templates/,将自己写好的模板文件拷贝到此次即可在项目中使用,在file->new->activity中快速生成模板文件。

模板编写

主要有以下几个文件,变量名用${var}表示

Activity.java.ftl中写activity相关代码

package ${packageName};public class ${activityName} extends BaseActivity {    @Bind(R.id.public_tv_title_text)    TextView publicTvTitleText;    @Bind(R.id.public_tv_title_save)    TextView publicTvTitleSave;    @Override    public int getLayoutId() {        return R.layout.${layoutName};    }    @Override    public void init() {        ButterKnife.bind(this);        SystemBarTintUtil.INSTANCE.setSystenBarTint(mActivity, findView(R.id.${layoutName}_root), true);    }    @Override    public void initEvent() {    }    @Override    public void initData() {        publicTvTitleText.setText("${title}");        publicTvTitleSave.setText(" ");        publicTvTitleSave.setVisibility(View.GONE);        publicTvTitleSave.setTextColor(Color.parseColor("#FF333333"));    }    @Override    protected void onResume() {        super.onResume();    }    @OnClick({R.id.rl_public_iv_back, R.id.public_tv_title_save})    public void onViewClicked(View view) {        switch (view.getId()) {            case R.id.rl_public_iv_back:                finish();                break;            case R.id.public_tv_title_save:                break;        }    }}

xml

<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:app="http://schemas.android.com/apk/res-auto"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:background="@color/white">    <RelativeLayout        android:id="@+id/${layoutName}_root"        android:layout_width="match_parent"        android:layout_height="match_parent"        android:layout_alignParentStart="true"        android:layout_alignParentTop="true"        android:background="@color/white"        android:orientation="vertical">        <include            android:id="@+id/public_title"            layout="@layout/public_title_layout_save" />    RelativeLayout>RelativeLayout>

manifest

<#import "../../common/shared_manifest_macros.ftl" as manifestMacros><manifest xmlns:android="http://schemas.android.com/apk/res/android"          package="${packageName}">    <application>        <activity android:name="${packageName}.${activityName}"                  android:screenOrientation="portrait"                  android:theme="@android:style/Theme.Translucent.NoTitleBar" />    application>manifest>

template

<?xml version="1.0"?><template    format="5"    revision="5"    name="WhiteTopbarActivity"    minApi="9"    minBuildApi="14"    description="Creates a new activity">    <category value="Oden" />    <formfactor value="Mobile" />    <parameter        id="activityName"        name="Activity Name"        type="string"        constraints="class|unique|nonempty"        suggest="${layoutToActivity(layoutName)}"        default="OdenActivity"        help="The name of the activity class to create" />    <parameter id="layoutName"        name="Activity Layout Name"        type="string" constraints="layout|unique|nonempty"        suggest="${activityToLayout(activityName)}"        default="activity_main"        help="The name of the layout to create for the activity" />    <parameter id="title"        name="Title Name"        type="string" constraints="layout|unique|nonempty"        suggest="title"        default="title"        help="The Title of the activity" />    <parameter        id="packageName"        name="Package name"        type="string"        constraints="package"        default="com.mycompany.myapp" />        <thumbs>                <thumb>template_blank_activity.pngthumb>    thumbs>    <globals file="globals.xml.ftl" />    <execute file="recipe.xml.ftl" />template>
  1. name属性为模板名称,description属性为模板的描述。
  2. category标签,定义了模板所属的分类,,分类名一样的模板会被归纳到同一目录下。
  3. parameter 标签,定义了模板输入弹窗中的输入参数,每个 parameter 为一行
    • id 属性为参数唯一标识,我们可以在代码中通过 id来使用该参数。
    • name 属性为参数名称,显示在输入控件的前面或后面。
    • type属性为参数类型,根据该属性和constraints属性的值综合比较后参数会被渲染成不同的输入形式,比如 string 类型会显示输入框,而 boolean类型会显示一个选择框。
    • constraints属性为输入约束,常见的有class,代表类名;layout代表布局名;package 代表包路径; unique则是不能与现有的重复;nonemptye表示不能为空。
    • suggest 和 default标签,前者是建议名称,后者是默认名称,前者优先级高于后者。
    • help属性是参数输入提示,当该参数获取焦点后,对应的帮助信息会显示在对话框上。
  4. globals标签指定了 global 文件,global 标签定义了一系列的全局参数,供后续模板文件使用。
  5. execute标签,跟字面上的意思一样,执行 recipe.xml.ftl文件的内容,将模板文件生成具体的可用文件。

recipe.xml

作用是定义输出规则

<?xml version="1.0"?><recipe>    <merge from="root/AndroidManifest.xml.ftl"        to="${escapeXmlAttribute(manifestOut)}/AndroidManifest.xml" />    <instantiate from="root/src/app_package/Activity.java.ftl"                   to="${escapeXmlAttribute(srcOut)}/${activityName}.java" />    <instantiate from="root/res/activity.xml.ftl"          to="${escapeXmlAttribute(resOut)}/layout/${layoutName}.xml" />    <open file="${escapeXmlAttribute(srcOut)}/${activityName}.java" />    <open file="${escapeXmlAttribute(resOut)}/layout/${layoutName}.xml" />recipe>
  • <#include>标签那行表示包含了 recipe_manifest.xml.ftl 文件的内容,里面是 标签,作用是将定义的 manifest.xml.ftl 文件转化为 manifest.xml后与项目中的 AndroidManifest.xml 文件合并,完成了 Activity 在 AndroidManifest.xml 文件中注册的工作
  • instantiate 标签是 recipe.xml.ftl 文件的核心标签,它的作用是将 from 属性的 ftl 文件转化为 to 属性的文件。
  • open 文件会打开对应的文件

更多相关文章

  1. android从未安装的apk文件里获取信息(包信息,资源信息)
  2. Android API开发之OpenGL开发之Android OpenGL显示STL模型文件
  3. android studio R文件找不到
  4. 解决IE apk变成zip:Android 手机应用程序文件下载服务器 配置解决
  5. 关于android中线性布局的layout_gravity属性
  6. Android 自定义标签属性设置及使用
  7. android:exported 属性分析
  8. android 源码下java文件的路径

随机推荐

  1. Android APK权限大全
  2. android 让Activity单例运行
  3. Android 日期控件的简单实现
  4. Android NDK Overview ---- Android 4.4
  5. Android 给TextView 添加图片(左右等)
  6. android通过http上传图片
  7. Android HandlerThread使用
  8. Android,visibility属性
  9. Android 自定义字体
  10. Android之MediaScanner流程