Fork me on GitHub

Android Studio模板之代码片段

代码片段是Template上的最小单位,因此它也具有最大的灵活性,支持多参数配置、TAB切换、代码块包装等多种特性(IDEA同样适用)。

UserManager

创建一个单例类

FileUtil

写一个将InputStream转化为String的方法

Test

生成main方法并打印数字

FileUtil

用try catch来包装代码块

上面的这些有的是IDE自带的,有的是自定义的。具体位置我们可以进入IDE,Preserences,Editor,Live Templates,我们可以在右边栏看到一些列IDE预设的template,如下图

step1

这里我们展开Android,可以看到下图

step2

这里面所有的我们都可以使用,括号后面的内容是为了描述该模板的,你也可以取消前面的勾选来取消该模板。

其实系统预设的有很多都是很实用的,有兴趣的可以去试一试,不多说。这里主要看一下如何自定义模板,把一些常用的代码片段DIY到自己的模板库中,当下次再需要同样代码的时候只需要一个标识符就能迅速自动生成。

我们点击右上角的加号,我们可以看到两个选项一个是Live Template,这个表示一个模板,另一个是Template Group,这个表示一个模板所属的分组,就像上面看到的Android,它就属于一个分组。

step3

接下来我们先创建一个自己的Template Group,名称随便取,不要与已有的分组重名就行,这里就取为Custom。然后我们选中新建的这个Custom分组再创建Live Template,会看到如下界面

step4

我对这个界面做了数字标志,大致说下每个区域代表的含义

  • 区域1:表示模板的缩写,也是我们最终使用时在编辑区输入的指令
  • 区域2:表示模板的提示,当输入对应缩写时,就会弹出这个提示
  • 区域3:这里就是最关键的模板区了,模板区包含两部分,一个是模板内容,它可以是任意字符串,另一个是模板变量,它有自己特殊的含义并且格式固定,首尾都是”$”符。模板变量又包含预设变量和自定义变量,比如”$END$”就是一个预设变量,它指定了模板导入结束后鼠标光标最终要停留的位置,而自定义变量则表示模板中一些动态性的部分,比如类名,它在不同的类中引入的结果是不同的。在多个自定义变量的情况下引入模板时,默认按TAB键切换至下个自定义变量位置。
  • 区域4:自定义变量的配置入口,可以给我们的自定义变量添加一些约束条件
  • 区域5:指定该模板的作用域,例如指定用于Java还是groovy等等
  • 区域6:提供一些引入模板的可选操作

这里我们来写一个生成单例的模板,我们按照下图定义好缩写,描述与模板内容

step5

模板内容的代码如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
private static final byte[] sInstanceLock = new byte[0];
private static $className$ sInstance;

private $className$() {
}

public static $className$ instance() {
if (sInstance == null) {
synchronized (sInstanceLock) {
if (sInstance == null) {
sInstance = new $className$();
}
}
}
return sInstance;
}

然后我们选择区域4来编辑我们的自定义变量,我们进去后可以看到如下弹窗

step6

  • Name为自定义的变量名称
  • Expression表示系统提供的一些方法
  • Default value为改变量的默认值
  • Skip if define勾选后,如果该变量被赋值则跳过,相当于引入过程中一次手动的TAB

接着我们在Expression中选择className(),并勾选Skip if define,并点击确定

step7

最后我们点击区域5来选择模板的作用域,我们选择Java—Declaration

stepl

然后保存,我们的单例模板便生成成功了。测试下,在IDE中新建个Java类,在类的内部输入single便出现最上面的那个UserManager的效果。

当然除此之外还有使用”$SELECTION$”来包装代码块的模板,这个使用场景相对较少这里就不举例了,主要使用的就是这种直接的模板模式。感觉一些常用的,特别是工具类中静态方法相关的,我们都可以抽取成模板,提高开发效率。


------------- The end -------------