模板的定制使用
在用Android Studio的向导新建项目时,在如下界面显示许多AndroidStudio内置的Activity模板:
或在工程中选择新建Activity时,也可以选择内置的Activity模板,界面如下:
这样可以大大提高开发效率。
这些模板放在Android Studio安装路径的如下文件夹中:plugins\android\lib\templates\activities,用户也可以自己定制模板。
在各APP中基本都有登录功能,现参考Android Studio中提供的LoginActivity模板,定制了一个登录功能用的Activity模板,名称为rwLoginActivity,界面如下:
首先编写rwLoginActivity.java代码和activity_rw_login.xml文件实现此Activity,然后在此基础上实现模板。
参考Andr oid Studio提供的模板,要定制一个模板,涉及到以下文件:
template_rw_login_activity.png—对应在Android Studio用向导创建Activity里看到的那个Activity界面示意图
template.xml—定义属性参数,内容如下:
<?xmlversion="1.0"?>
<template
format="5"
revision="1"
name="RuWang LoginActivity"
description="Creates a new loginactivity, allowing users to enter a phone number and password to log in to orregister with your application."
requireAppTheme="true"
//此Activity支持的最小API级别
minApi="17"
minBuildApi="17">
<categoryvalue="Activity" />
<formfactorvalue="Mobile" />
//以下parameter参数和相关属性会在创建Activity时,ConfigureAcitvity界面用到,需要用户输入一些参数值,且向用户显示一些提示信息,default和help的内容支持中英文
<parameter
id="activityClass"
name="Activity Name"
type="string"
constraints="class|unique|nonempty"
default="rwLoginActivity"
help="The name of theactivity class to create" />
<parameter
id="layoutName"
name="Layout Name"
type="string"
constraints="layout|unique|nonempty"
suggest="${activityToLayout(activityClass)}"
default="activity_rw_login"
help="The name of the layoutto create for the activity" />
<parameter
id="activityTitle"
name="Title"
type="string"
constraints="nonempty"
default="登录"
help="The name of theactivity." />
<parameter
id="passwordLength"
name="Password Length"
type="string"
constraints="nonempty"
default="6"
help="设置密码长度"/>
<parameter
id="parentActivityClass"
name="HierarchicalParent"
type="string"
constraints="activity|exists|empty"
default=""
help="The hierarchicalparent activity, used to provide a default implementation for the 'Up'button" />
<parameter
id="packageName"
name="Package name"
type="string"
constraints="package"
default="com.mycompany.myapp" />
<thumbs>
<thumb>template_rw_login_activity.png</thumb>
</thumbs>
<globalsfile="globals.xml.ftl" />
<executefile="recipe.xml.ftl" />
</template>
globals.xml.ftl和recipe.xml.ftl的后缀是ftl,表示这两个文件使用的是FTL(FreeMarkerTemplate Language)语言,这是一种简单的模板编写语言。
globals.xml.ftl—定义属性参数,内容如下:
<?xmlversion="1.0"?>
<globals>
//定义此Activity界面是否有ActionBar,value为true,表示不需要ActionBar
<globalid="hasNoActionBar" type="boolean" value="true"/>
//定义此Activity是否具有"android.intent.action.MAIN"
和"android.intent.category.LAUNCHER"两个属性
<global id="isLauncher"type="boolean" value="${isNewProject?string}" />
//以下两项不用修改,保留原样
<globalid="GenericStringArgument" type="string"value="<#if buildApi lt 19>String</#if>" />
<globals file="../common/common_globals.xml.ftl"/>
</globals>
其中lt是FTL语言关键字,相当于比较运算符“小于”,其它几个类似功能的关键字:
gt:比较运算符"大于"
gte:比较运算符"大于或等于"
lte:比较运算符"小于或等于"
recipe.xml.ftl—对代码文件和资源文件的处理
AndroidStudio提供的LoginActivity模板界面没有图片,rwLoginActivity模板界面有图片,需要在LoginActivity模板的recipe.xml.ftl文件中增加一个copy指令,复制模板资源图片到工程中的资源目录下:
<copyfrom="root/res/drawable"
to="${escapeXmlAttribute(resOut)}/drawable" />
其余部分不需修改。
在root文件夹里包含此Activity相关的代码、资源文件和AndroidManifest文件:
AndroidStudio提供的LoginActivity模板界面有ActionBar,rwLoginActivity模板界面没有ActionBar,需要把LoginActivity模板的AndroidManifest.xml.ftl文件里的主题设置代码改成自己需要的主题名称:
<#ifhasNoActionBar>
android:theme="@style/Theme.AppCompat.Light.NoActionBar"
其余部分不需修改。
LoginActivity.java.ftl可以在之前写好的rwLoginActivity.java文件基础上做修改,导入包名的代码改成:
package${packageName};
类名和父类名改成:
publicclass ${activityClass} extends ${superClass}
密码长度参数的赋值语句改成:
privateint mPasswordLength = ${passwordLength};
其余部分复用rwLoginActivity.java的代码。
activity_login.xml.ftl也可以在之前写好的activity_rw_login.xml文件基础上做修改,里面涉及类名的地方改成:
tools:context="${relativePackage}.${activityClass}"
其余部分复用activity_rw_login.xml的代码。
完成开发后,把rwLoginActivity模板文件夹放在Android Studio安装路径的如下文件夹中:plugins\android\lib\templates\activities,关闭并重启Android Studio,就可以使用rwLoginActivity模板了。
创建rwLoginActivity的界面如下: