此文已由作者鄢正辉授权网易云社区发布。
欢迎访问网易云社区,了解更多网易技术产品运营经验。
有句戏言是“偷懒是程序员的美德”,作为程序员,一方面我们在代码层面讲究模块化、讲究复用,另一方面能用脚本或工具来做就绝不用手。而今天要介绍的 Live Template 就是可以解放 Android 开发双手的一大利器。
何为 Live template ?直译是“实时模板”,它的机制简单地说就是提前定义好一些通用的代码片段在编写代码时插入编辑器,使用方法类似代码补全,默认快捷方式是 Tab 键(不同平台不同版本可能有差异)。本文将根据 Android Studio 1.5+ 版本介绍 Live template 相关内容。
进入 Settings/Preferences -> Editor -> Live Templates,可以看到当前已经有的的模板组。可以看到,默认情况下已经有一些模板存在。
打开分组的某个具体模板,可以看到一个模板包含了缩写、描述、内容三块。在编写代码的过程中输入模板缩写,按下 Tab 键,对应的代码片段就插入到当前位置。
以上就是 Live Template 的简单使用,基本与普通代码补全没啥差别,特别简单实用。
当然,默认的模板虽然不少,但我们不会止步于使用默认的模板,下面说一说如何自定义模板。
进入 Settings/Preferences -> Editor -> Live Templates,选择某个分组,点击右上角的 “+” 号,选择 Live Template。
点击下方的 “Define”,选择适用范围。如适用于 class 文件就选 java ,适用于 xml 文件就 xml。
选定了范围后,在范围之外的文件则无法使用该模板。例如 Android XML 分组的“lh”模板选定了 xml,则在 class 文件中是无法使用的。
如图二所示,一个模板包括模板缩写、描述、内容三块。
模板缩写一方面是模板的名称,另一方面是 Live Template 的触发标识,命名上建议尽量简洁,同时不要与普通类名、方法名等相同。
描述是模板的详细描述,在提示中会显示给用户。
内容是模板的具体定义,由普通代码和变量组成。
模板内容除了写死的内容外,还可以声明和使用变量。变量形式为 variablename 。通过点击下图中的“Edit variables”按钮打开变量定义窗口我们就可以开始创建当前模板的变量。
Name 变量名,对应 variable_name
Expression 变量的表现
Default value 默认值
Skip if defined 是否跳过编辑
编辑器已经事先定义好 Expression 的一些方法, 部分常用方法如下:
方法 | 描述 |
---|---|
annotated("annotation qname") | 注解 |
arrayVariable() | 集合变量 |
className(sClassName) | 当前类名 |
classNameComplete() | 当前完整类名 |
complete() | 代码补全 |
componentTypeOf () | 集合内的元素类型 |
date(sDate) | 系统当前日期 |
expectedType() | 所需结果的类型,这个在类型转换中特别适用 |
fileName(sFileName) | 带扩展名的文件名 |
iterableComponentType() | 可遍历的集合或数组类型 |
lineNumber() | 行号 |
methodName() | 方法名 |
methodReturnType() | 方法返回类型 |
suggestIndexName() | 建议的索引名(i/j 等) |
suggestVariableName() | 建议的变量名 |
time(sSystemTime) | 系统时间 |
typeOfVariable(VAR) | 变量类型 |
user() | 当前用户名 |
(详见 https://www.jetbrains.com/help/idea/2016.1/live-template-variables.html#predefined_functions )
众所周知,单例是程序开发中最常用的模式之一,虽然有多种实现方案,但不管选择哪种都避免不了重复写一些“样板代码”,而这种场景就可以用live template 来解决了。接下来我们用创建单例模式的模板来具体说明如何自定义模板。
1, 进入 Settings/Preferences -> Editor -> Live Templates,选择某个分组,点击右上角的“+” 号,选择 Live Template。
2, 选定适用范围为 java。
3, 填上缩写为 singleTon,描述为单例模式。然后把以下代码拷贝到模板内容中:
private static class SingleTonHolder { private static final $class$ INSTANCE = new $class$(); }public static $class$ getInstance() { return SingleTonHolder.INSTANCE; }private $class$() { }
4, 这里定义了 class 变量,需要点击 edit variables 创建该变量,变量名为 class,Expression 选择 className() 。点击 OK 保存。
5, 创建某个class后,输入 singleTon ,按下 tab 键就可以看到单例模板。
第一种方案是,创建完模板后模板数据会以XML的形式存储在 android studio config\templates 目录下,window下为 C:\Users\\<user>\\.AndroidStudiox.x\config\templates (user为你的计算机用户名), mac下为 ~/资源库/Preferences/AndroidStudiox.x/templates ,将其中的文件拷贝出即可导出;同理可知,导入时将已定义好的xml文件放到相同目录下,即可完成导入。
第二种方案是,通过 File -> Export Settings 和 Import Settings,只选中 Live Templates。
在项目开发过程中,我们经常需要写一些“样板式代码”,一方面这些代码不可或缺,另一方面经常写一样的东西也让我们够头疼。于是我们就在考虑引入 Live Template 来减小这块工作量。
引入 Live Template 的另一个好处是,对于非编码型的代码规范,我们可以做一个比较好的统一。例如,Android 开发中,我们应该使Message.obtain()来获取一个 Message 实例,而不是去 new 一个。
自定义 Live Template 可以分成两部分,一部分是相对通用的模板,作为默认模板的补充,比如上文中的单例模式模板;另一部分是跟项目逻辑深度相关的模板,比如使用项目中自定义的LogUtil而不是普通的Log来打 log 。
上文中已经给出自定义通用模板的例子,这里再给出项目相关模板的示例。
例如,项目内部有 toast 工具类来显示一个 toast,定义一个名为“yxtoast”的模板(避免与普通toast冲突,加上前缀),内容是
ToastUtil.makeShortToast($strRes$);
最后,将这些自定义模板导出放到 gitlab 上,其他同事只需要将这些文件 clone 到对应目录下,即可直接使用。
https://www.jetbrains.com/help/idea/2016.2/live-templates.html
网易云免费体验馆,0成本体验20+款云产品!
更多网易技术、产品、运营经验分享请点击。
相关文章:
【推荐】 适配的那些事
【推荐】 聊聊WS-Federation