借用图

概述

上图的效果就是android studio的模板,我们可以通过自定义模板方便我们日常的开发。

开始

首先从android studio自带的模板说起
在android studio的安装目录下的\plugins\android\lib\templates\activities下保存了android studio系统自带的activity模板 截图如下:

通过模板可以快速的开发,但是由于我们UI大大的需求不会简单到使用系统自带的模板就可以完成的。

我们从最简单的Empty Activity开始分析,先看目录结构

root 文件夹 资源文件、模板文件

globals.xml.ftl 提供参数
recipe.xml.ftl 生成实际所需代码、资源文件等,使用参数替换其中的变量
template parameter标签,提供参数(图形化)

template_blank_activity 实际模板照片

平常我们自定义模板通常是复制已有的模板出来,然后在上面修改在

1.template.xml 属性详解

 <?xml version="1.0"?>
<templateformat="5"revision="5"name="Empty Activity"minApi="9"minBuildApi="14"description="Creates a new empty activity"><category value="Activity" /><formfactor value="Mobile" /><parameterid="activityClass"name="Activity Name"type="string"constraints="class|unique|nonempty"suggest="${layoutToActivity(layoutName)}"default="MainActivity"help="The name of the activity class to create" /><!-- 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 属性,对应新建 Activity 时显示的名字

  • <category> 对应New的类别为Activity 上面parameter标签中部分属性如下:

    • id :唯一标识,最终通过该属性的值,获取用户输入值(文本框内容,是否选中)
    • name:界面上的类似label的提示语
    • type : 输入值类型
    • constraints:填写值的约束
    • suggest:建议值,比如填写ActivityName的时候,会给出一个布局文件的建议值。
    • default:默认值
    • help:底部显示的提升语 对应的android studio操作的图形化界面(上面代码有删减)

2.打开globals.xml.flt

 <?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>

globals存储的是一些全局变量

3.recipe.xml.ftl

 <?xml version="1.0"?>
<#import "root://activities/common/kotlin_macros.ftl" as kt>
<recipe><#include "../common/recipe_manifest.xml.ftl" /><@kt.addAllKotlinDependencies /><#if generateLayout><#include "../common/recipe_simple.xml.ftl" /><open file="${escapeXmlAttribute(resOut)}/layout/${layoutName}.xml" />
</#if><instantiate from="root/src/app_package/SimpleActivity.${ktOrJavaExt}.ftl"to="${escapeXmlAttribute(srcOut)}/${activityClass}.${ktOrJavaExt}" /><open file="${escapeXmlAttribute(srcOut)}/${activityClass}.${ktOrJavaExt}" /></recipe>

常用标签及其含义:

  • copy :从root中copy文件到我们的目标目录,比如我们的模板Activity需要使用一些图标,那么可能就需要使用copy标签将这些图标拷贝到我们的项目对应文件夹。
  • merge : 合并的意思,比如将我们使用到的strings.xml合并到我们的项目的stirngs.xml中
  • instantiate : 和copy类似,但是可以看到上例试将ftl->java文件的,也就是说中间会通过一个步骤,将ftl中的变量都换成对应的值,那么完整的流程是 ftl->freemarker process -> java
  • open:在代码生成后,打开指定的文件,比如我们新建一个Activity后,默认就会将该Activity打开。

freemaker简单语法:

if 指令

 //当价格为0时,就会打印出 "Pythons are free today!":
<#if animals.python.price != 0>Pythons are not free today!
</#if>

<#if >
<#elseif >
<#else >
</#if >

 <#if animals.python.price < animals.elephant.price>Pythons are cheaper than elephants today.
<#elseif animals.elephant.price < animals.python.price>Elephants are cheaper than pythons today.
<#else>Elephants and pythons cost the same today.
</#if>

include 指令

使用 include 指令, 我们可以在模板中插入其他文件的内容。

示例

一.template

 <?xml version="1.0"?>
<templateformat="5"revision="5"name="自定义列表的 Activity"minApi="9"minBuildApi="14"description="创建一个新的列表"><category value="Activity" /><formfactor value="Mobile" /><parameterid="activityClass"name="Activity Name"type="string"constraints="class|unique|nonempty"suggest="${layoutToActivity(layoutName)}"default="MainActivity"help="The name of the activity class to create" /><parameterid="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" /><parameterid="generateLayout"name="Generate Layout File"type="boolean"default="true"help="If true, a layout file will be generated" /><parameterid="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" /><parameterid="generateAdapter"name="是否自动创建adapter"type="boolean"default="true"help="If true, a adapter file will be generated" /><parameterid="adapterName"name="adapter Name"type="string"constraints="class|unique|nonempty"suggest="${underscoreToCamelCase(classToResource(activityClass))}Adapter"default="MainAdapter"visibility="generateAdapter"help="The name of the adapter to create for the activity" /><parameterid="generateItemLayout"name="是否自动创建item"type="boolean"default="true"help="If true, a item layout file will be generated" /><parameterid="itemLayoutName"name="item 的 Layout Name"type="string"constraints="layout|unique|nonempty"suggest="item_${classToResource(activityClass)}"default="item_main"visibility="generateItemLayout"help="The name of the layout to create for the activity" /><parameterid="backwardsCompatibility"name="Backwards Compatibility (AppCompat)"type="boolean"default="true"help="If false, this activity base class will be Activity instead of AppCompatActivity" /><parameterid="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>

效果:

上面需要注意的就是使用输入的时候suggest这个属性,这里提供几种内置方法

这里注意几个内置函数:

1.suggest="${layoutToActivity(layoutName)}"

如:layoutName=“activity_main” ——> MainActivity

如:layoutName=“main” ——> MainActivity

2.suggest="${activityToLayout(activityClass)}"

如:activityClass=“MainActivity” ——> activity_main

如:activityClass=“Main” ——> activity_main

3.suggest="${underscoreToCamelCase(classToResource(activityClass))}Adapter"//首字母是大写

如:activityClass=“MainActivity” ——> MainAdapter

如:activityClass=“Main” ——> MainAdapter

4.suggest=“item_${classToResource(activityClass)}” //首字母变成了小写

如:activityClass=“MainActivity” ——> item_main

如:activityClass=“Main” ——> item_main

其余两个文件参考Empty Activity

参考文章

  • Android Studio自定义模板 写页面竟然可以如此轻松
  • 神奇的Android Studio Template
  • Android studio的自定义模板详解
  • 自定义Android Studio工程模板
  • 【 Android Studio】自定义Activity模板

原作者:蔡百凯

  • 原文链接

Android Studio自定义activity模板相关推荐

  1. Android Studio自定义模板之MVPActivity

    前言 Android开发中经常需要创建Activity.一般情况下,咱们都是"New"->Java Class/Activity.但是Android Studio自带的Act ...

  2. Android Studio(7)---从模板添加代码

    从模板添加代码 Android Studio 提供了众多遵循 Android 设计与开发最佳方法的代码模板,可以指导您正确创建功能强大的美观应用.您可以使用模板创建新应用模块.各种 Activity ...

  3. android+自定义皮肤,android studio自定义更换皮肤详细图文教程

    android studio这款app程序开发软件内也内置了多种皮肤主题,程序开发人员如果感觉一种皮肤太过单调乏味,可以选择使用软件内的其他皮肤风格,软件默认的皮肤是IntelliJ,还有黑色的Dra ...

  4. Android Studio自定义视图无法预览

    Android Studio自定义视图没有办法预览 我想大家应该都和我一样,如果看到布局的编码的时候如果右边能够非常直观地显示出对应的视图,心里会非常舒心,像官方提供的tools命名空间就是为了这个目 ...

  5. android 自定义皮肤,Android Studio 自定义皮肤主题和背景

    新的一年,新的开始,在这里先祝福大家在新的一年收获多多,多升职,多加薪,代码没BUG. 第一 Android Studio自定义皮肤主题-ColorThemes 寒假期间有人问我, "你代码 ...

  6. Android Studio 之 注释模板

    Android Studio 之 注释模板 我们看有的项目的文档,会发现它的注释写的很好看,很规范. 而如果你的代码注释还是在用简单的 // 或者 /**/  ,那就学习一下在Android Stud ...

  7. android studio 皮肤,Android Studio 自定义皮肤主题和背景

    Android Studio自定义皮肤主题-ColorThemes 最近有人问我, "你代码这是用的什么字体? 看着好舒服", 其实这是用了自定义皮肤主题包,主题包下载网站 htt ...

  8. android studio自定义app图标

    android studio自定义app图标 1.右键app名称-New-ImageAsset 2. 选择Launcher Icons(Legency only) Name 图标名称这里不要更改 不更 ...

  9. Android通用初始化Activity模板

    Android通用初始化Activity模板 很多Android程序开始运行的时候,都会首先启动一个初始化的InitActivity,然后在这个InitActivity的加载函数(onCreate)中 ...

最新文章

  1. 高并发场景下的限流策略
  2. SAP MM 公司间STO发货单输出报错 - 合并工厂AUC1和存储位置6002没有货物收货地点 - 之对策
  3. python中关于操作时间的方法(一):使用time模块
  4. 创建 tls 客户端 凭据时发生严重错误。内部错误状态为 10013_kubectl 创建 Pod 背后到底发生了什么?...
  5. python系统目录_Python创建系统目录的方法
  6. Linux下安装zookeeper集群(奇数个)
  7. 单片机ch2o程序_基于单片机的室内甲醛浓度检测系统
  8. 我见过的最漂亮代码---通过删除代码来实现功能的提升
  9. Gentle.NET 使用文档
  10. 迭代开发个人总结20160627
  11. 代码换肤术——C#和VB(摘抄)
  12. Codeforces Round #190 (Div. 1): E. Ciel and Gondolas(决策单调性DP+wqs二分)
  13. MySQL常见问题及解决方案
  14. Message Unable to connect to SQL Server '(local)'
  15. linux运行perl脚本,linux运行perl脚本_将Perl脚本从Solaris移植到Linux
  16. 1330: PIPI的乐高积木
  17. 2022中秋股市复盘随笔
  18. MATLAB数组相除
  19. Maven(一):什么是Maven?
  20. 6.1 Python图像处理之图像编码技术和标准-DPCM编码

热门文章

  1. 回收站太多被删除文件,导致打不开的解决办法
  2. 什么牌子投影仪好?国产投影仪什么牌子好
  3. 打开文件夹并选定指定的文件
  4. Django对接支付宝实现支付宝充值金币功能
  5. AI Earth ——开发者模式案例2:Landsat系列影像数据去云
  6. 连续系统的离散化方法
  7. 你适合怎样的手机浏览器?分享一款功能强大、支持插件的浏览器
  8. vb.net如何查询电脑麦克风收到声音_笔记本电脑新星横空出世,你还在问什么笔记本电脑性价比高?...
  9. linux下apache端口被占用,【linux】下Apache无法启动(8080端口被占用)
  10. 计算机超链接文档顶端,word超级链接-常用Word文档,看看这些快捷键你知道几个?...