操作与导航
IDE的操作导航技巧是掌握、驾驭一个IDE的必备技能。下面笔者将介绍一些比较常用的操作与导航技巧。
单词选择
在Android Studio中,通过键盘操作来选择单词是编辑代码时最常用的操作。在默认的Android Studio配置中,IDE设置的是通过“Option+←”快捷键来实现按单词的光标移动。但在Android编程中,开发者使用最多的是驼峰命名法。此时如果按单词来整体移动的话,那么在选择某些变量的一部分时就不是很方便,智能的Android Studio提供了安装驼峰命名法来实现光标移动的设置,如图3.14所示。
图3.14 实现光标移动
在设置中开启“Use CamelHumps words”即可使用该功能,开启后,再通过“Option+←”快捷键就可以按照驼峰来移动光标选择了。
显示最近操作、修改
在Android Studio中,使用“Command+E”和“Command+Shift+E”快捷键,可以快速显示最近的文件操作和文件修改,如图3.15和图3.16所示。
图3.15 Recent Files
使用“Command+E”快捷键显示了最近浏览过的文件,类似于浏览器的浏览记录。
图3.16 Recent Edited Files
使用“Command+Shift+E”快捷键显示了最近编辑过的文件。与此同时,你可以使用“Control+Tab”快捷键进行各个界面的切换,如图3.17所示。
图3.17 窗口导航
这个功能在开发新功能的时候非常有用,因为很多时候开发者需要操作多个类。通过这个功能,可以快速在编辑的几个类间进行切换,提高开发的效率。
操作记录
当开发者在浏览代码时,通常会进行代码的跳转,而当想回到之前浏览过的地方时就比较麻烦了。而Android Studio保存了每个操作的历史,通过快捷键“Command+Option+Left\Right”来进行访问位置的导航,这一功能在Eclipse中就已经有了,相信大部分的开发者都使用过,这里不再赘述。
移动行
整体移动某行是很常用的方法,在Android Studio中,通过“Option+Shift+方向键上\方向键下”就可以实现某一行的上下移动。类似的方法也可以通过这个快捷键进行整体的移动。
查找调用
在开发中,查找一个方法在何处被调用过或者查找一个ID在哪里被引用过是经常性操作。例如要查找initViews()的调用处,只要选中这个方法单击鼠标右键,选择“Find Usages”即可,如图3.18所示。
图3.18 Find Usages
当然,你也可以使用快捷键“Option+F7”进行快速查找。
快速方法操作
在不同的方法间进行跳转是开发者了解程序架构的必备技能。在Android Studio中,开发者可以通过按住“Command”键,并点击方法名的方式进入方法,查看方法详情。你也可以通过直接使用“Command+B”快捷键进入一个方法。
查找参数定义与文档
在使用一个方法时,通过快捷键“Command+P”可以快速查看该方法的参数定义,如图3.19所示。
图3.19 查看参数
使用快捷键“Command+P”可以看出initViews方法的参数定义,在输入这个方法的时候就会自动弹出这个提示了。
那么如果想显示整个方法的文档呢?例如要查看系统方法的API文档,或者是自己写的方法的注释,可以使用快捷键“F1”查看API文档,如图3.20所示。
图3.20 查看文档
如果你想像使用Eclipse一样,当鼠标放上去的时候就显示文档的提示,那么可以在设置中进行设置,Editor-General-Show quick documention on mouse move,如图3.21所示。
图3.21 文档悬浮提示
这个功能有时候并不好,在代码较多的时候,鼠标悬浮即可看见文档会导致阅读代码时经常被弹出的文档打断,影响使用体验。而且自动弹出悬浮提示也比较耗性能,开发者可以根据自己的需要来决定是否开启。
快速行操作
通过快捷键“Command+Shift+Up\Down”,可以迅速地将一行移动到上面一行或者下面一行,而不需要通过剪切来进行两行的交换。
那么如何删除一行呢?默认的快捷键是“Command+Backspace”,但是这两个键按起来不是很方便,所以笔者通常采用快捷键“Command+X”的方式进行删除行的操作(该操作实际上是剪切行操作)。
类似的方式,复制一行也有相应的快捷键“Command+D”(该快捷键在Eclipse中是删除行,需要习惯一下)。通过这个快捷键,开发者可以迅速复制上一行的代码,同时将光标停留在变量名的地方,方便开发者直接进行修改。
快速断点
当开发者在进行代码调试时,如果碰到要在循环体中打断点,但是却只需要在某种情况下才断,例如i==5时,那么使用条件断点就可以非常方便地做到这一点。
条件断点与普通断点一样,直接在左边的编辑面板上点击就能生成,而要给一个普通断点增加条件功能,只需要在普通断点上单击鼠标右键,在弹出菜单的Condition中填入断点条件即可,如图3.22所示。
图3.22 条件断点
同时,在这里还能启用、停用一个断点,点击Enable复选框即可实现。除了条件断点之外,开发中还有一种断点用得比较多,那就是临时断点。在调试时,开发者可能会临时增加一些断点,而这些断点并不是开发者一直需要的。也就是说,开发者实际上只想让这个断点执行一次,下次就不想在这个地方继续执行断点了,那么这个时候,临时断点就派上用场了。要增加一个临时断点也非常简单,只需要执行快捷键“Command+Option+Shift+F8”即可将当前行作为临时断点。如图3.23所示。
图3.23 临时断点
临时断点与普通断点的区别就在于临时断点上有一个数字“1”,当临时断点执行一次后,这个断点就会自动消失,不需要开发者手动取消了。
异常断点
设想一种场景,测试拿着手机过来说,App崩溃了需要处理,你要如何去做呢?通常的办法是先复现问题,然后用ADB抓Log找出具体的异常原因,再结合代码分析。然而有了Android Studio,就完全不需要这么麻烦了!
举个例子,程序中最常见的Crash莫过于NullPointerException了,如何在程序中可能出现NullPointerException的地方都打上断点呢?其实根本不需要这么做,开发者只要打开Run-View breakpoints界面,点击右上角的“+”,选择Java Exception Breakpoints,并输入要监听的异常即可,如图3.24所示。
图3.24 异常断点
如图3.24所示,笔者在这里选择监听NullPointerException。那么在程序运行的时候,不需要设置任何断点,只要App因为NullPointerException异常而导致崩溃,系统就会在对应的地方自动断点并暂停,如图3.25所示。
图3.25 异常断点信息
这个功能可能很多开发者都不知道,但是在通过Log文件的崩溃信息调试程序的时候是非常有用的,可以快速定位到错误的代码。
日志断点
开发者经常会遇到这样的情况,整个工程的代码已经写完了,突然出现一个bug需要加一行Log进行调试,因为这一行Log要把整个工程都编译一遍,这是非常痛苦的事。而实际上,Android Studio已经提供了针对这个问题的解决方案,那就是日志断点。
例如下面这个例子,开发者需要在每次循环中打出一句Log,但是又不想增加一行Log,如图3.26所示。
图3.26 日志断点
此时可以使用日志断点来增加Log而不需要修改代码。首先,你需要在要断点的地方打上一个普通断点。然后在断点上单击鼠标右键,选择suspend属性为false,并在下面的Log evaluated expression中写入日志信息即可,如图3.27所示。
图3.27 日志断点信息
这样设置后,在程序运行时就不用重新编译,而且会在断点处打出你需要的日志信息。
多重选择
Android Studio提供了很多高级的编辑技巧,可以让代码的编辑变得非常方便。例如对文本的多重选择功能。当代码的上下文中有很多相同的代码,而开发者又需要同时对这些代码块进行操作时,就可以使用多重选择功能。例如将好几个private修改为public,好几个int修改成float等,如图3.28所示。
图3.28 多重选择
只要将光标放在第一个int处,使用快捷键“Control+G”就可以选中第一个int,再按一次快捷键“Control+G”就可以选中第二个int。以此类推,全部选择完毕后,只需要一次修改就可以完成所有的修改。另外需要注意的是,这个快捷键不仅可以选择类似int、private这样的修饰符,当多个变量中包含相同的命名时也可以使用。例如firstX、secondX中的X,同样可以使用这种方式进行修改。
除了通过相似性进行多重选择,Android Studio还提供了通过列进行多重选择的方式,如图3.29所示。
图3.29 列选择
要实现如图3.29所示的多重选择,只需要按住“Option”键并拖动即可。除了使用上面两种方式进行多重选择之外,与Sublime类似,Android Studio也支持多光标的操作方式,如图3.30所示。
图3.30 多光标编辑
如图3.30所示,在要修改的地方,通过快捷键“Option+Shift+鼠标点击”就可以增加一个新的编辑光标,从而对多个地方进行同时修改。
快速完成
在Android Studio中,很多地方的操作都是可以偷懒的。通过使用快捷键“Command+Shift+Enter”,在很多地方可以让Android Studio快速完成某些操作。例如方法体大括号的添加、行尾分号的添加、自动格式化该行等操作。笔者现在基本上每写完一行代码,都会使用这个快捷键来补全、格式化,非常有用。
代码提示
代码提示是一个IDE的重要功能之一,Android Studio提供了非常强大的智能提示,通过使用快捷键“Control+Space”就可以在代码的任何地方调出代码提示,如图3.31所示。
图3.31 代码提示
在使用代码提示时,有一点需要注意的是,当显示出候选的提示后,通过Enter键可以完成提示的输入。另外,通过Tab键同样也可以完成提示的输入,区别是它会将后面已经输入的提示全部删掉,而Enter键会保留后面的输入。
除了使用快捷键“Control+Space”获取代码提示之外,在Android Studio中,IDE还提供了快捷键“Control+Shift+Space”以显示更加智能的代码提示。通常情况下IDE可以根据上下文来获取更为丰富的代码提示,如图3.32所示。
图3.32 智能提示
代码提示不仅可以用于代码编写的过程中,在程序出现错误时,也可以借助快速完成快捷键“Option+Enter”获取代码修改提示。例如,笔者使用快捷模板logi,产生一条Log日志,IDE会自动生成如下所示的代码。
- Log.i(TAG, "onCreate: ");
这时在TAG变量上使用快捷键“Option+Enter”,选择“Create constant field‘TAG’”即可,如图3.33所示。
图3.33 快速修复
对于笔者所举的这个例子来说,IDE已经内置了logt快捷模板来生成如下所示的代码。
- private static final String TAG = "MainActivity";
不管通过哪种方式,Android Studio的提示功能都是非常全面的。通过提示,可以让Android Studio指出开发者代码存在的潜在风险和优化的方法,帮助开发者完成更好的代码。
调试中计算变量的值
在调试过程中的一些使用技巧,在《Android群英传》中已经进行了介绍。这里补充一点,在调试过程中只要按住Alt键,点击代码中的表达式,即可显示表达式的值。其他的调试技巧,开发者可以参考《Android群英传》中Android Studio的相关内容。
设置变量命名代码风格
根据Google的代码风格指南,类的成员变量通常要以m开头,而静态成员变量通常要以s开头。因此,你可以在设置中设置变量的命名规则,如图3.34所示。
图3.34 变量前后缀
在Field的Name prefix中设置m,在Static field的Name prefix中设置s。这样在输入一个变量的名字时,就可以自动补全m或者s,如图3.35所示。
图3.35 变量命名
同时在Extra代码的时候,生成的代码都可以自动根据这个规则重构。
查看大纲
当项目很大的时候,通过使用快捷键“Command+F12”,可以调出大纲界面,即显示方法和成员变量列表,如图3.36所示。
图3.36 查看大纲
通过输入方法名,可以快速定位到方法。同时它还支持模糊查询,查询方法的一部分关键字也能进行筛选,如图3.37所示。
图3.37 大纲筛选
通过这种方式,开发者可以快速找到想要搜索的方法。
书签
在接手老项目的代码或者在调试代码时,往往需要分析代码的思路,经常需要记录一些关键的代码、方法。这时候使用书签来记录就是最好的方式,类似在Chrome中添加书签,通过快捷键F3可以将一处代码添加到书签或者从书签中删除,如图3.38所示。
图3.38 书签
添加到书签的代码,在行数旁边会有一个小钩,同时在Favorites标签中,可以找到相应的Bookmarks,如图3.39所示。
图3.39 显示书签
另外,通过快捷键“Command+F3”,可以调出书签面板,显示所有的书签,如图3.40所示。
图3.40 显示所有书签
这个工具对于记录代码中的关键点非常有用,有利于分析代码结构。
附加调试
开发者一定遇到过当项目很大时,编译一次需要很长时间,而这时候又需要调试程序的情况。那么除了直接使用Debug运行程序以外,还可以使用attach to debugger的方式。
在ADB连接手机的情况下,点击attach to debugger按钮并选择要调试的程序(只能调试Debug签名的App),即可进入调试模式,不需要通过Debug运行程序,如图3.41所示。
图3.41 附加调试
这种调试方式在项目开发中使用得非常多,毕竟一个大的项目,如果使用Debug模式进行运行会非常卡。而通过附加调试的方式就可以以正常的方式进行程序运行,然后再进行调试了。
其他操作技巧
Android Studio还有很多其他操作技巧,这里不再一一列举,只是简单进行一下功能描述。
- 代码折叠
通过快捷键“Command+-”和“Command++”,可以对一段代码进行折叠和展开,如图3.42所示。
图3.42 代码折叠
- 在文件系统中打开文件
按住Command键并点击打开的代码Tab页,就可以在文件系统例如Finder中打开代码文件。或者选中文件,单击鼠标右键,选择Reveal in Finder同样可以在文件系统中打开文件,如图3.43所示。
图3.43 在文件系统中打开
- 预览方法定义
开发者在调试代码的时候,如果想查看某个方法的定义,但又不想跳转到方法所在的类,那么就可以使用快捷键“Command+Y”在当前页面上对指定方法进行预览,如图3.44所示。
- 拆分窗口
通常情况下,在编辑界面只有一个界面。通过窗口拆分,可以同时展示更多的界面。在菜单栏中选择Window→Editor Tabs→Split vertical\horizontal,这样就可以在整个编辑区域显示多个编辑界面,不论是进行代码对比还是查看都非常方便。
- 相关文件
对于Activity来说,通常都有与之对应的XML布局文件。这些布局文件作为Activity的相关文件会被标记在类的最前面,如图3.45所示。
图3.44 预览方法定义
图3.45 相关文件
点击这个标记,就可以关联到相应的XML文件。很多地方都会出现这样的标记,例如颜色、图标等,这些相关联的内容可以通过点击这些标记进行跳转。
- 查找快捷键
由于笔者的电脑是Mac系统,因此很多快捷键在Windows平台上是无法使用的,那么使用其他平台系统的开发者如何才能找到对应的快捷键呢?答案非常简单,打开设置中的Keymap,如图3.46所示。
图3.46 Keymap
在下拉框中,Android Studio内置了各个平台的快捷键模板,通过切换可以找到对应的平台,例如Mac。找到需要查找的快捷键,记住其名称,再切换回自己系统的快捷键,通过名称找到对应的快捷键即可。而且在旁边的输入框中,Android Studio还提供了通过输入按键进行快捷键查找的方式,非常方便。
