一般来说键盘用的越多鼠标用的越少,那么写起代码来效率就越高;常见的快捷键想必大家都已经掌握,接下来我就分享一些你可能不知道的但确非常实用的快捷键。
下文所有快捷键基于如下keymap
1、Windows: Default
2、Linux: Default
3、 OSX: Mac OSX 10.5+

自动补全enter和tab区别
在使用自动补全的时候Enter和Tab的行为还是有一些细微的区别的:
使用Enter会补全你选择的语句
使用Tab的话,会替换掉你之前在这里的内容(删除后面的语句直到遇到点号,逗号,分号)
这种情况我们还是会经常遇到的,比如要替换一个资源的ID(R.id.a_xxx_xxx),想必大多数人都是先选择a.xxx_xxx删除,然后输入新的内容,或者相反;其实这时候,用Tab才是最优雅的方式。
快捷键:(在补全的时候)
Enter/Tab

返回编辑器窗口
正在写代码的时候,很多操作会让焦点脱离编辑器;比如Find Usage, Logcat,切换到项目结构视图,类型继承树等;如果视图切换了如何快速切回编辑器继续写代码呢?简单的鼠标点一下编辑器就可以了,但其实还有两种选择:
Esc: 让编辑器窗口获取焦点,这时候就可以输入代码了
Shift + Esc: 这个会让编辑器获取焦点,并且顺手帮你把刚刚打开的窗口关闭了。
个人喜欢第二种;Find Usage完毕了,Shift + Esc, 优雅~
Esc: 返回编辑器
Shift + Esc: 返回编辑器并关闭当前窗口

返回最后打开的工具窗口
接上面那个功能,如果你Shift+Esc写了一会儿代码,发现又需要打开刚刚的窗口怎么办?这种场景通常发生在Logcat这个Tol Window上,看完了日志,写代码,写完代码看日志;如何快速切换?
快捷键:
F12

使用数字快捷打开窗口
有木有发现有的窗口上面有个数字?这样的窗口(工具窗)我们可以快捷打开!
Mac:Cmd + 数字
windows/Linux:Alt + 数字

窗口切换
上面的切换还是无法满足你的要求?记得Mac的Cmd + Tab,Windows的Alt/Win + Tab吗?Android Studio也有这个类似的功能,可以让你切换到任意窗口!
在这个切换窗口打开的时候,你可以直接按数字切换到对应的工具窗口,或者输入字母搜索右边的编辑器窗口,如果你需要关闭某个窗口,在上面按BackSpace即可。
快捷键:
Ctrl + Tab

隐藏所有窗口
好了学了那么多打开窗口的技能,如果你想关闭那些乱七八糟的窗口,安安静静写代码应该怎么办?
Mac:CMD + Shift + F12
windows/Linux:Ctrl + shift + F12
如果需要恢复所有窗口,再按一次这个快捷键即可。

参数提示
这个功能估计很多人知道了,但是还是提一下。在自动补全以后,如果某个方法参数超级长,你不知道参数是什么怎么办?可以试试这个。
Mac:CMD + P
win/Linux:Ctrl + P

自动生成变量
作为一门静态类型语言,Java是有一定的类型推导能力的;那么你是否经常书写:
String testStr = "testStr";
List<String> testStrings = new ArrayList<String>();
其实大可不必写那些恼火的类型声明的,一看就知道testStr,testStrings就知道是什么类型,再这么干不就是废话么!好在IDEA给了我们这个能力。尝试一下这个快捷键吧,会给你惊喜。
Mac:Cmd + Alt + V
Win/Linux:Ctrl + Alt + V
有的童鞋可能会问了:我使用ArrayList,HashMap的时候,习惯类型声明为List,Map等接口,这个自动生成的类型声明还是具体的实现啊,怎么办?这一点IDE已经帮你想到了,试试shift+tab,他会给你一个可以选择的类型列表~

自动提取参数
有时候你正在写一个方法的时候发现。哎哟,这个变量最好是当作参数传递进来啊;要做成这么一件事,你必须把这个方法内部所有使用这个局部变量的地方替换,把所有调用这个函数的地方添加参数,繁琐至极!好了有了这个你可以随便玩了:
Mac:Cmd + Alt + P
Win/Linux:Ctrl + Alt + P
当然,如果你想保留原来的方法,只是搞一个参数不同的方法(重载)出来,可以在弹出的那个对话框里面打勾。

自动提取方法
写代码的时候是否会发现不知不觉的这个方法已经太长了,适合分解然后提取出一个个子方法;或者是重构的时候看到一个一两千的函数,你是不是头都大了?一般情况下,我们都是把要提取的代码copy出来,然后写一个方法(还要什么该死的方法签名)然后把这段代码复制进来;其实这个过程是机械的,完全可以由IDE完成:
Mac:Cmd + Alt + M
Win/Linux:Ctrl + Alt + M
如果想改变方法的签名,在对话框里面选择你需要的就可以了~
上面提到了三个快捷键其实是比较类似的,如何记忆呢?
首先组合键都是Cmd/Ctrl + Alt
然后提取变量Variable=V,参数Parameters=P,方法Method=M

内联
好了学会了上面那几个快捷键,万一玩high了,比如提取了太多的方法,想“弄回去”,该怎么办呢?这个操作叫他Inline..
Mac:Cmd + Alt + N
Win/Linux:Ctrl + Alt + M
上面那个图只是参考,其实不仅可以作用于变量,还可以是方法/参数,个人觉得方法inline比较有用。

万能重构键
静态类型语言重构起来相对容易的,但是通常修改一个地方会牵扯到很多别的地方,我们只有一处一处找到这些编译错误然后手动修复。其实有好多工作是可以自动完成的,比如删除某个方法;先确认有没有人调用(Alt + F7),没有的话把方法体删了,有的话去看看调用的地方再决定怎么办。
但是重构的操作实在是太多了!我们没有办法也没有必要一个个记住,知道这个快捷键即可,我叫他万能重构键
Mac :Ctrl + T
Win/Linux:Ctrl + Alt + Shift + T
在Win/Linux上可以考虑把这个快捷键改一下键,一下按四个键臣妾很难做到啊。。
这个重构菜单每一个功能都可以自己去尝试一下,使用之后不好用你来打我。

重命名
好了介绍了那么多貌似很高端的玩意,来个大部分人都知道的吧。有时候你发现有个变量名字取得有问题,或者没文化的队友/自己单词拼错了咋办?需要把所有用到这个变量的地方重新命名,小case!
快捷键:
shift + F6
说实话,想不出一个比较好的翻译 :P 干脆使用英文吧。

Select In..
有没有这样的场景:你在Android Studio打开了一个图片文件(或者别的文件),想在资源浏览器里面查看这图片;在Eclipse里面我想大部分的人是Alt + Enter进入文件属性复制地址,然后在系统资源管理器里面打开;或者装一个EasyExplore插件。在Android Studio里面,这是内建支持的!而且还不止如此!比如你想看看某个文件在包的哪个目录,通常是不是点击Project View上面的那个小圆坐标;用这个快捷键鼠标就能搞定。
快捷键:
Alt + F1
弹出的菜单有一系列的选项;按对应的数字就可以选择;其他的菜单有什么功能可以自己尝试一下。

拓展选择
这个功能应该很多人都知道;但还是说明一下,因为跟下面两个功能跟这个结合起来才有威力。这个功能太强大了,自己去按几遍就能想到很多使用场景了;我相信有了这个功能,你使用鼠标的机会会少很多。
Mac:Alt + up/down
Win/Linux:ctrl + w / ctrl + shift + w

Surround With
如果你想把一段代码使用if语句包起来;又或者使用try包围一段可能有运行时异常的代码,你会怎么干?
首先用光标定位到代码块开头,写上try {然后,光标代码块末尾加上} catch (XXXRuntimeException e) {// todo}?可以试试这个快捷键。
Mac:cmd + alt + t
Win/Linux:ctrl + alt + t
可以使用上面的拓展选择选择你需要的代码块,然后使用这个功能Surround With;如果你什么都不选择的话,那么默认选择的是光标所在行。

Unwrap
这个功能跟上面提到的是一对,有了Surround With自然就有Unsurround With;使用情况没有上面那个那么多,但是好歹一对,一起介绍吧。

highlight something
有时候看代码的时候,看到某个变量想知道哪里使用了它;你还在用肉眼查找吗?或者你杀鸡用牛刀Find Usgae
?其实你的需求就是把这个变量全部给我打个标签,我想直观的知道它在哪。
Mac:cmd + shift + F7
Win/Linux:ctrl + shift + F7
这个键功能远不止这个!
如果你高亮return或者throw,那么会把这个方法所有的返回点高亮出来!
高亮某个类的extends或者implements会把这个类Override的方法高亮出来
高亮import会把使用的地方显示出来
如果不想要高亮了,按下Esc就行。

方法调用树
在看源码的时候,你还是使用alt+F7和ctrl+B在各个类之间来回穿梭吗?其实好多时候你就是想知道这个调用结构是怎么样的而已;谁是怎么一步一步滴调用谁的;这个快捷键会给你一个调用树。有了这个大菊观,继续探讨就很容易了。
快捷键:
ctrl + alt + h

万能快捷键
记得之前提到过一个万能重构键, 有关重构的一切操作都可通过它完成。那么Android Studio这么快捷键,这么多功能,臣妾怎么可能都记住!要是有万能钥匙就好了!That’s it!
使用这个快捷键,你想到什么功能,打开它搜索就可以了;打个比方,我想看看Java的for each循环和普通的for循环底层是不是同一个实现;那么我就需要看虚拟机字节码了;我记得有这个功能但是不知道快捷键是啥;OK,Cmd + shift + A,输入bytecode:

PS:(我用的Intellij IDEA,Android Studio没有集成bytecode功能,可能搜索不到)
好了,其实所有的快捷键的功能都可以用这个搜索到~~实在记不起来也就用万能键吧!
文章作者:Weiwei SUN
文章地址:http://tianweishu.com/2015/12/17/shortcut-of-android-studio-you-may-not-know-3/
