开启成长之旅!这是我参加「日新计划 2 月更文挑战」的第 12 天,点击查看活动概况
前言
咱们平常开发时,能够运用IDE供给的一些功用来完成进步开发功率,防止写重复代码的作用。而Android Studio供给的Live Templates绝对算得上一个得力助手。可能有的人说了,这个东西很积累,我玩两天就不想玩了,我只想说,当你把相同东西玩到极致的时分,你就知道它为何强壮。
我也不敢说自己时十分熟悉,可是也用得习气,所以仍是想分享一些运用的心得。
何为模板
这让我想到了许多年前,当年MVVM还刚开端传播,正是MVP大火之时,然后其时的人写MVP都有个习气,按着一套模板来写,写个xxxActivity类,写个xxxPresenter类,写个xxxModel类,然后这些类有许多相同的代码。这时分就有人发明出了一些插件,通过这些插件你就能一键生成这些类,然后就做少许改动就行,有点流水线的意思。
Live Templates也是这个道理,我帮你生成一些常用的代码结构,然后只需要细节的改动就行,省去许多写重复代码的时间,有的人可能会说封装啊,其实假设你项目大的话,你就会发现,即使你封装了许多东西,哪怕你乃至去封装和事务相关的代码,都仍是照样会写许多重复代码。Live Templates相对于上面的插件,会更轻量级,并且这是官方供给的东西。
Live Templates在我运用的时分主要是能为我供给3个好处:
(1)快速生成代码,不必再写点点点
(2)防止仿制时可能会出现的一些细节上没改过来
(3)会有我自己的提示,忘掉一些API的运用办法的话不必再花时间去查
运用Live Templates
逼逼了这么多,得上点实践的才能让人知道好不好用。
在AS中点开 File -> Settings -> Editor -> Live Templates
直接点击右边的+号,Template Group创立一个组,我这儿创立的便是kylin,选中组后点+号Live Template就能创立模板了
创立模板后在页面中的Template text中输入模板内容,在change中挑选模板范围,有变量的话再Edit variables中设置变量,这些后边都会讲。
根本便是定义几个组,然后组内有几个模板,我个人是分为3个组,一个是常用的功用代码,一个是和事务相关的,一个是其它操作。我这儿抽几个模板出来写个Demo来演示(由于个人的一切模板涉及公司事务,所以不能直接展现,我就抽几个出来演示,作用相同的)
留意了,这儿有个细小的知识点,看到我自己写的模板,都是kfc开头的,你以为是随意搞得?当然不是,这是为了防止和体系的关键字冲突并且让我更好的查我忘掉的办法,便是上面的好处(3)
kfc便是kylin fast create,缩写kfc,当我忘掉某个办法时,我只需要输入kfc
看见没有,这是有注释的,中文注释,比方我想运用Glide,哎哟可是我忘掉怎样调用了(当然我不可能忘掉,举个比方罢了),一般怎样做,要么去其它运用的当地copy代码过来,没写过就百度去收然后拉下来,但我这儿一输kfc,找到我的注释,一会车,立刻处理。
这就能完成忘掉一些API的运用办法的话不必再花时间去查
然后再看看快速生成代码的作用,我这儿仍是要提一句,这种作用对java来说比对kt会明显许多,由于kt有时分java许多的代码他一行就能完成,所以这种就不必写模板。
拿我最喜欢运用的模板来说,假设写java的双检锁单例,你会怎样写,而我是这样的
就一下就能生成了,快得很。并且这儿比仿制安全多了,比方仿制你忘掉改类名了(当然这个编译器会报红给你),假设不会,那就细节上出问题了,而我这儿直接生成的话,类名便是我这个类的类名。
举例模板
这儿能够举例一些我常用的模板的定义
比方上面说的单例,在Template text中写模板
private static volatile $name$ m$name$ = null;
private $name$(){}
public static $name$ getInstance(){
if (m$name$ == null){
synchronized ($name$.class){
if (m$name$ == null){
m$name$ = new $name$();
}
}
}
return m$name$;
}
然后在Change里边选java,由于这段代码是java的嘛,不要全选,不然比方你全选会包含kotlin,你会在kotlin中也能输入single打出这段代码,这就没必要了
然后由于我这儿有变量name,所以要在Edit variables中给变量定规则。这儿Expression里边选的便是类名简称,所以这儿的name在补全出来之后就会替换成类名。
这是其间一种设置模板的办法,带变量的办法。可是由于用变量的话得设置Edit variables,但它有时分并不能去适配一切的场景,所以我这边还有一种不带参数的设置模板的办法。
其主要中心有2点:
(1)随意用什么代替变量,主要是补全后会让那个当地爆红,然后去修改变量就行(这比仿制粘贴更安全)
(2)宁可多写,然后删去用不上的代码,由于咱们删去的速度比写代码的速度快。
比方我对一个Glide的运用设置一个模板,我能够这样写kfcGlide
Glide.with(context)
.load(xxxxx)
.placeholder(xxxxx)
.error(xxxxx)
.into(imageView);
这儿xxxxx只是占位符,补全后编译器会爆红给你提示,再替换参数就行,然后假设你不想运用placeholder或error的话,直接删去就行,好过你写模板的时分不写它们,但要用的时会加上去,删总比敲的快。
其它
1. Expression
首先关于Expression的各个含义,这个网上能随意找到,我这儿就不额定说了,主要我也不敢说悉数都懂,只用了其间一部分。
2. 导出模板
关于怎么导出模板,比方咱们写了许多模板,可是咱们由于某些原因要换另外一台的AS(你们不要多想,我指的是家里的电脑的AS和公司电脑的AS),这时分,咱们总不可能把这么多模板重新写吧,哪怕一个个仿制粘贴过来配置也是花费时间啊,其实模板能导入导出
File -> Manager IDE Settings -> Exprot Settings -> 选一切的Live Templates选项
导出后能看到一个xml,这个便是咱们导出的模板文件
导入也相同,这儿就不演示了
3. 体系默认供给的Live Templates
能够看到上面阐明的是怎么自定义咱们的模板,但其实AS默认也是会供给一些模板的,看这张图就知道
AS有给你供给Java的,kotlin的,乃至C++和Python的都有。这个就太多了,假设想学的话只能自己去网上查,我很早之前学过一次,但都忘了许多,其实它给你供给的模板也是很有用的,举个比方,比方说写for循环
假设你不知道模板的话,你可能就会直接写for(){},然后在把输入位置移动到括号里输int i = 0 …….
可是假设你运用AS给你供给的模板,你只需要输入5.fori就能够了