俗话说。不想偷懒的程序猿不是好程序猿。那么今天就教大家偷懒下!

先举个样例。我们在 Android 开发中输入 Toast ,然后会有例如以下例如以下的高速操作:

是不是非常方便?

有同学问,这不就是自己主动补全么?错了,乍一看是自己主动补全。事实上不然。自己主动补全是对一个方法或类名的补全,比方你输入 find 然后就会有 findViewById 方法提示你,你能够高速定位。可是我们实际开发中一般还须要对它强制转型,然后加上 R.id.xx 来声明它的 id。可是你能够试着输入 fbc ,然后按 tab 或者 enter 键。你会发现比自己主动补全还要更方便。

这个就叫做 Live Template 。假设真要翻译姑且就叫做实时模板吧,在 AS 中有两种模板。一种就是你在新建一个 Activity 的时候能够选择 Empty Activity、FullScreen Activity 之类的,这个通常是对你整个文件而言的。另一种就是本篇要介绍的 Live Template 。这个会在一些经常使用到的代码片段会非常实用。

打开 设置 -> Editor -> Live Templates ,能够看到默认已经有非常多 Live Templates 了,能够看下我的截图 Android 分类下有例如以下这些模板:

你都能够输入那些缩写来高速启用这些模板,比方定义一个常量。高速设置 View 为 gone 。高速启动一个 Activity 等。你都能够直接输入 constgonestarter 来高速操作。是不是认为非常酷炫!

那详细是怎样实现的呢?我们最好还是点击这些模板列表的 starter 。有例如以下代码:

public static void start(Context context) {
Intent starter = new Intent(context, $ACTIVITY$.class);
starter.putExtra($CURSOR$);
context.startActivity(starter);
}

当中 ACTIVITY 代表当前所在的类名,CURSOR 代表当前鼠标的定位位置,同理 newInstance 能够帮你在 Fragment 中高速声明一个新建 Fragment 的方法,它的代码例如以下:

public static $fragment$ newInstance($args$) {
$nullChecks$
Bundle args = new Bundle();
$addArgs$
$fragment$ fragment = new $fragment$();
fragment.setArguments(args);
return fragment;
}

当中 $$ 代表是一个变量,中间包裹着这个变量的名字,你能够对这个变量声明类型。这个后面再说。

是不是非常easy理解呢?假设理解了那么就能够来依据自己的使用习惯来定义自己的 Live Templates 了。

比方我们在开发中要经常写单例模式吧?每次都要写这么一大段是不是非常烦?那么今天就教大家自己定义一个单例模式的模板。以后轻松搞定单例。

设置 -> Editor -> Live Templates ,点击右上角的 + 号,选择 Template Group ,由于我习惯自己定义的单独分组先,这样好管理,比方新建一个分组叫做 stormzhang ,然后就会看到有一个 stormzhang 的分组显示在了列表里,这时候鼠标选中该分组,然后再点击右上角的 + 号,点击 Live Template ,然后例如以下图填写缩写与描写叙述,紧接着把例如以下代码复制到以下的输入框里(PS:单例模式的写法有非常多种,这里就任意以当中一种为例)

private static $CLASS$ instance = null;

private $CLASS$(){
} public static $CLASS$ getInstance() {
synchronized ($CLASS$.class) {
if (instance == null) {
instance = new $CLASS$();
}
} return instance;
}

注意这里,假设你这段代码是一些固定的代码。那么至此就结束了,可是这段代码里是动态的,里面有一些变量,由于每一个类的类名假设都须要自己手动更改就太麻烦了,所以有个变量 CLASS ,所以须要点击以下的 Define ,先要定义变量所属的语言范围。点开之后能够看到这里支持 HTML、XML、JSON、Java、C++ 等。非常明显,我们这里须要支持 Java ,选择选中 Java :

紧接着,我们须要给变量 CLASS 定义类型。这里的 CLASS 名字任意取的,为了可读性而已。你高兴能够取名 abc ,真正给这个变量定义类型的是点击 Edit variables button,来对该变量进行编辑,我们选择 className() 选项,能够看到还有其它选项,可是看名字大家大概就猜到什么含义了,这里就不一一解释了。

点击 ok 保存。至此我们定义的一个单例的 Live Template 就完毕了。你能够任意打开一个类文件,然后输入 singletontab 或者 enter 键就能够看到奇妙的一幕出现了,是不是非常帅?

看完这篇文章想想自己还有哪些经常使用到的代码片段,赶紧把它定义成一个 Live Template 吧,你会发现你又能够变懒了!

本文原创公布于微信公众号 AndroidDeveloper「googdev」。转载请务必注明出处!

让你变懒的 Android Studio Live Templates的更多相关文章

  1. Android Studio 提高开发效率的插件

    好久没有更新博客了,最近搞个listview搞得半死不活的,心累~~ 今天带来的是Android Studio插件的整理,全是我已经安装使用的,写这篇博文的目的也是因为我怕我自己给忘记怎么用(尴尬) ...

  2. android studio 项目生成的apk变小的原因

    问题:感觉直接在apk文件夹下面拷出来的apk不能安装使用,而且apk比较小,可能就是这个问题引起的 Android Studio版本升级到2.3后,增加了instant run功能,对项目的buil ...

  3. 使用Android studio过程中发现的几个解决R变红的办法

    刚开始使用Android studio的时候,好几次碰见新建了一个xml文件,或者new了一个activity之后,Android studio莫名其妙的报错了,而显示红色的地方就是常用的(R.id. ...

  4. Android Studio在代码重构中的妙用

    代码重构几乎是每个程序员在软件开发中必须要不断去做的事情,以此来不断提高代码的质量.Android Stido(以下简称AS)以其强大的功能,成为当下Android开发工程师最受欢迎的开发工具,也是A ...

  5. Android Studio 多个编译环境配置 多渠道打包 APK输出配置

    看完这篇你学到什么: 熟悉gradle的构建配置 熟悉代码构建环境的目录结构,你知道的不仅仅是只有src/main 开发.生成环境等等环境可以任意切换打包 多渠道打包 APK输出文件配置 需求 一般我 ...

  6. Android Studio —— 重装 HAXM

    Android Studio -- 重装 HAXM 版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 文中如有纰漏,欢迎大家留言指出. Android SDK 自带模拟器一直以慢.卡 ...

  7. android studio你可能忽视的细节——启动白屏?drawable和mipmap出现的意义?这里都有!!!

    android studio用了很久了,也不知道各位小伙伴有没有还在用eclipse的,如果还有,楼主真心推荐转到android studio来吧,毕竟亲儿子,你会知道除了启动速度稍微慢些,你找不到一 ...

  8. Android Studio快捷键

      一.android studio 默认快捷键 刚开始接触一款开发软件,想必很想了解它的快捷方式,这会对你的编程起到很好的帮助,提高工作效率,接下来给你介绍下Android Studio一些常用的快 ...

  9. ubuntu 14.10 lts 64-bits环境下使用Android Studio

    距离google发布android studio 1.0正式版已经两个月左右了.由于一直习惯使用eclipse+ADT的模式,而且曾在windows下试用一次Android Studio预览版,感觉卡 ...

随机推荐

  1. Linux系列教程(十三)——Linux软件包管理之源码包、脚本安装包

    上篇博客我们讲解了网络yum源和光盘yum源的搭建步骤,然后详细介绍了相关的yum命令,yum 最重要是解决了软件包依赖性问题.在安装软件时,我们使用yum命令将会简单方便很多.我们知道yum命令只能 ...

  2. JavaScript 中对变量和函数声明的“提前(hoist)”

    hoist vt.升起,提起; vi.被举起或抬高; n.起重机,升降机; 升起; <俚>推,托,举; 这篇文章不讲英语,但是对于某些英语单词找不到很好的翻译,一上来就列出“hoist”这 ...

  3. 数据库集群 MySQL主从复制

    MySQL主从复制 本节内容我们联系使用MySQL的主从复制功能配置Master和Slave节点,验证数据MySQL的数据同步功能. 因为要使用多个MySQL数据库,所以不建议在电脑上安装多个MySQ ...

  4. python是如何进行内存管理的

    Python引入了一个机制:引用计数. python内部使用引用计数,来保持追踪内存中的对象,Python内部记录了对象有多少个引用,即引用计数,当对象被创建时就创建了一个引用计数,当对象不再需要时, ...

  5. RabbitMQ之路由

    为了实现一个新功能:只订阅消息的一个子集,例如只需要把严重的错误日志信息写入日志文件(存储到磁盘上),但同时仍然把所有的日志信息输出到控制台中. 绑定(Bindings) 创建绑定 channel.q ...

  6. python 小白(无编程基础,无计算机基础)的开发之路 day2

    本节内容 列表.元组操作 字符串操作 字典操作 集合操作 文件操作 字符编码与转码 1. 列表.元组操作 列表是我们最以后最常用的数据类型之一,通过列表可以对数据实现最方便的存储.修改等操作 定义列表 ...

  7. IdentityServer4(10)- 添加对外部认证的支持之QQ登录

    前言 前面我们提到过IdentityServer4是可以添加外部认证的,如果外部认证支持OAuth2,那么添加到IdentityServer4是非常简单的,在ASP.NET Core下提供了非常多的外 ...

  8. jq 时间计算

    -(function($){ var caculation = function(gap){ var minutes = 1000 * 60 var hours = minutes * 60 var ...

  9. Javascript中prototype属性

    prototype作为JS相对比较难理解的一个知识点,在这里发表下自己的理解. 本文将包含以下几部分内容: 1.js prototype的简单介绍, 2.js构造函数的介绍, 3.prototype的 ...

  10. CVE-2017-11882漏洞利用

    CVE-2017-11882漏洞利用 最新Office的CVE-2017-11882的poc刚刚发布出来,让人眼前一亮,完美无弹窗,无视宏,影响Ms offcie全版本,对于企业来说危害很大.在此简单 ...