一.代码查找技巧
1. 书签(Bookmarks)
描述:这是一个很有用的功能,让你可以在某处做个标记(书签),方便后面再跳转到此处。
调用:Menu → Navigate → Bookmarks
快捷键:
添加/移除书签:F3(OS X) 、F11(Windows/Linux);
添加/移除书签(带标记):Alt + F3(OS X)、Ctrl + F11(Windows/Linux);
显示全部书签:Cmd + F3(OS X) 、Shift + F11(Windows/Linux),显示所有的书签列表,并且是可以搜索的。
上一个/下一个书签:无,可以在设置中设置快捷键。
2. 折叠/展开代码块(Collapse Expand Code Block)
描述:该操作提供一种方法,让你隐藏你不关心的部分代码,以一种较为简洁的格式显示关键代码。
一个有意思的用法是隐藏匿名内部类的代码,让其看起来像一个Lambda表达式。
快捷键:Cmd + “+”/”-“(OS X)、Ctrl + Shift + “+”/”-“(Windows/Linux);
3.上下文信息(Context Info)
描述:当前作用域定义超过滚动区域,执行该操作将显示所在的上下文信息,通常它显示的是类名或者内部类类名或者当前所在的方法名。该操作在xml文件中同样适用。
调用:Menu → View → Context Info
快捷键:Alt + Q (Windows/Linux)
4. 查找操作(Find Action)
描述:输入某个操作的名称,快速查找,对于没有快捷键的部分操作这是一个很有用的技巧。
快捷键:Cmd +Shift + A(OS X)、Ctrl + Shift + A(Windows/Linux);
5.在方法和内部类之间跳转(Move Between Methods and Inner Classes)
描述:该操作让光标在当前文件的方法或内部类的名字间跳转。
调用:Navigate → Next Method/Previous Method;
快捷键:Ctrl + Up/Down(OS X)、Alt + Up/Down(Windows/Linux);
6.定位到嵌套文件(Navigate to Nested File)
描述:有时你有一堆存放在不同目录下的同名文件,例如不同模块下的AndroidManifest.xml文件,当你想定位到其中的一个文件,你会得到一堆搜索结果,
你还得辨认哪个才是你需要的。通过在检索框中输入部分路径的前缀,并添加斜杠号,你就可以在第一次尝试的时候就找到正确的那个
快捷键:Shift + Cmd + O(OS X)、Shift + Ctrl + N(Windows/Linux);
7. 定位到父类(Navigate to parent)
描述:如果光标是在一个继承父类重写的方法里,这个操作将定位到父类实现的地方。如果光标是在类名上,则定位到父类类名。
Menu → Navigate → Super Class/Method
快捷键:Cmd + U(OS X)、Ctrl + U(Windows/Linux);
8. 在外部打开文件(Open File Externally)
描述:通过这个快捷键,简单地点击Tab,就可以打开当前文件所在的位置或者该文件的任意上层路径。
快捷键:Cmd + 单击Tab(OS X)、Ctrl + 点击Tab(Windows/Linux);
9.参数信息(Parameter Info)
描述:这个操作将显示和你在方法声明处写一样的参数列表,当你想看某个存在的方法的参数,这是一个很有用的操作。光标下的参数显示为黄色,如果没有参数显示黄色,意味着你的方法调用是无效的,很可能是某个参数分配不对。(例如一个浮点数赋值给了整型参数)。如果你正在写一个方法调用,突然离开编辑的地方,再返回的时候,输入一个逗号,就可以重新触发参数信息。
快捷键:Cmd + P(OS X)、Ctrl + p(Windows/Linux);
10. 快速查看定义(Quick Definition Lookup)
描述:你曾经是否想查看一个方法或者类的具体实现,但是不想离开当前界面? 该操作可以帮你搞定。比如查看父类方法的实现
快捷键:Alt + Space / Cmd + Y(OS X)、Ctrl + Shift + I(Windows/Linux)
11.查看当前类的结构
ctrl+F12
12查看类的继承结构关系
ctrl+h
二.代码编码技巧
1.列选择/块选择(Column Selection).
alt+鼠标左键 批量编码
2.语句补全(Complete Statement)
描述:这个方法将会生成缺失的代码来补全语句,常用的使用场景如下:
在行末添加一个分号,即使光标不在行末;
为if、while、for 语句生成圆括号和大括号;
方法声明后,添加大括号;
调用:Menu → Edit → Compelete Current Statement
快捷键:Cmd + Shift + Enter(OS X)、Ctrl + Shift + Enter(Windows/Linux);
3. 删除行(Delete Line)
描述:如果没选中,则删除光标所在行,如果选中,则会删除选中所在的所有行。
快捷键:Cmd + Delete(OS X)、Ctrl + Y(Windows/Linux)
4.行复制(Duplicate Line)
描述:复制当前行,并粘贴到下一行,这个操作不会影响剪贴板的内容。这个命令配合移动行快捷键非常有用。
快捷键:Cmd + D(OS X)、Ctrl + D(Windows/Linux)
5.使用Enter和Tab进行代码补全的差别(Enter vs Tab for Code Completion)
描述:代码补全时,可以使用Enter或Tab来进行补全操作,但是两者是有差别的。
使用Enter时:从光标处插入补全的代码,对原来的代码不做任何操作。
使用Tab时:从光标处插入补全的代码,并删除后面的代码,直到遇到点号、圆括号、分号或空格为止。
6.提取方法(Extract Method)
描述:提取一段代码块,生成一个新的方法。当你发现某个方法里面过于复杂,需要将某一段代码提取成单独的方法时,该技巧是很有用的。
调用:Menu → Refactor → Extract → Method
快捷键:Cmd + Alt + M(OS X)、Ctrl + Alt + M(Windows/Linux);
7.动态模板(Live Templates)
setting-Editor-Live templates中的系统内置的模板,重点是AndroidComments和AndroidLog
还有自定义设置的模板,后面会有栗子。
8.上下移动行(Move Lines Up Down)
描述:不需要复制粘贴就可以上下移动行了。
快捷键:Alt + Shift + Up/Down;
9.移动方法(Move Methods)
描述:这个操作和移动行操作很类似,不过该操作是应用于整个方法的,在不需要复制、粘贴的情况下,就可以将整个方法块移动到另一个方法的前面或后面。该操作的实际叫做“移动语句”,这意味着你可以移动任何类型的语句,你可以方便地调整字段或内部类的顺序。
快捷键:Cmd + Alt + Up/Down(OS X)、Ctrl + Shift + Up/Down(Windows/Linux
10.重命名(Rename)
描述:你可以通过该操作重命名变量、字段、方法、类、包。当然了,该操作会确保重命名对上下文有意义,不会无脑替换掉所有文件中的名字;
快捷键:Shift + F6
11.分号/点 补全(Semicolon Dot Completion)
描述:代码补全这个功能太棒啦!我们大概都对以下这种情况很熟悉:开始输入点什么东西,接着从IDE得到一些建议的选项,
然后通过Enter或者Tab来选择我们想要的补全代码。其实还有另外一种方法来选择补全的代码:我们可以输入一个点(.)或者一个分号(;)。
这样就会完成补全,添加所选字符。这在结束一条语句补全或者快速链式调用方法的时候特别有用。
注意点:如果你要代码补全的方法需要参数,这些参数会被略过。
12.包裹代码(Surround With)
描述: 该操作可以用特定代码结构包裹住选中的代码块,通常是if语句,循环,try/catch语句或者runnable语句。 如果你没有选中任何东西,该操作会包裹当前一整行。
快捷键:Cmd + Alt + T(OS X)、Ctrl + Alt + T(Windows/Linux)
13.移除包裹代码(Unwrap Remove)
描述:该操作会移除周围的代码,它可能是一条if语句,一个while循环,一个try/catch语句甚至是一个runnable语句。该操作恰恰和包裹代码(Surround With)相反。
快捷键:Cmd + Shift + Delete(OS X)、Ctrl + Shift + Delete(Windows/Linux)
14.后缀补全
setting-Editor-General-Postfix Completion
这些死记吧
15.重写方法,实现接口,get和set方法实现等:
alt+insert 都可以实现
16.快速实现硬编码的字符串定义到string.xml中:
alt+enter
三.调试技巧
不用太多,Log打印和断点调试即可。
最后,给出几个自己常用的live templates模板:
单例实现之double check:
private static volatile $class$ INSTANCE = null;
private $class$(){
}
public static $class$ getInstance(){
if (INSTANCE == null) {
synchronized ($class$.class) {
if (INSTANCE == null) {
INSTANCE = new $class$();
}
}
}
return INSTANCE;
}
单例实现之静态内部类:
private $class$(){
}
private static class SingletonInstance {
private static $class$ INSTANCE = new $class$();
}
public static $class$ getInstance(){
return SingletonInstance.INSTANCE;
}
click事件实现:
public void onClick(View view) {
switch (view.getId()) {
case R.id.$resId$:
$content$
break;
default:
break;
}
}
switch代码块:
switch ($content$) {
case $value$:
$code$
break;
default:
break;
}
String对象判空:
TextUtils.isEmpty($content$)
综上几个模板的命名自己随意定义,怎么添加请自己百毒吧!