操作与导航

IDE的操作导航技巧是掌握、驾驭一个IDE的必备技能。下面笔者将介绍一些比较常用的操作与导航技巧。

单词选择

在Android Studio中,通过键盘操作来选择单词是编辑代码时最常用的操作。在默认的Android Studio配置中,IDE设置的是通过“Option+←”快捷键来实现按单词的光标移动。但在Android编程中,开发者使用最多的是驼峰命名法。此时如果按单词来整体移动的话,那么在选择某些变量的一部分时就不是很方便,智能的Android Studio提供了安装驼峰命名法来实现光标移动的设置,如图3.14所示。

操作与导航 - 图1 图3.14 实现光标移动

在设置中开启“Use CamelHumps words”即可使用该功能,开启后,再通过“Option+←”快捷键就可以按照驼峰来移动光标选择了。

显示最近操作、修改

在Android Studio中,使用“Command+E”和“Command+Shift+E”快捷键,可以快速显示最近的文件操作和文件修改,如图3.15和图3.16所示。

操作与导航 - 图2 图3.15 Recent Files

使用“Command+E”快捷键显示了最近浏览过的文件,类似于浏览器的浏览记录。

操作与导航 - 图3 图3.16 Recent Edited Files

使用“Command+Shift+E”快捷键显示了最近编辑过的文件。与此同时,你可以使用“Control+Tab”快捷键进行各个界面的切换,如图3.17所示。

操作与导航 - 图4 图3.17 窗口导航

这个功能在开发新功能的时候非常有用,因为很多时候开发者需要操作多个类。通过这个功能,可以快速在编辑的几个类间进行切换,提高开发的效率。

操作记录

当开发者在浏览代码时,通常会进行代码的跳转,而当想回到之前浏览过的地方时就比较麻烦了。而Android Studio保存了每个操作的历史,通过快捷键“Command+Option+Left\Right”来进行访问位置的导航,这一功能在Eclipse中就已经有了,相信大部分的开发者都使用过,这里不再赘述。

移动行

整体移动某行是很常用的方法,在Android Studio中,通过“Option+Shift+方向键上\方向键下”就可以实现某一行的上下移动。类似的方法也可以通过这个快捷键进行整体的移动。

查找调用

在开发中,查找一个方法在何处被调用过或者查找一个ID在哪里被引用过是经常性操作。例如要查找initViews()的调用处,只要选中这个方法单击鼠标右键,选择“Find Usages”即可,如图3.18所示。

操作与导航 - 图5 图3.18 Find Usages

当然,你也可以使用快捷键“Option+F7”进行快速查找。

快速方法操作

在不同的方法间进行跳转是开发者了解程序架构的必备技能。在Android Studio中,开发者可以通过按住“Command”键,并点击方法名的方式进入方法,查看方法详情。你也可以通过直接使用“Command+B”快捷键进入一个方法。

查找参数定义与文档

在使用一个方法时,通过快捷键“Command+P”可以快速查看该方法的参数定义,如图3.19所示。

操作与导航 - 图6 图3.19 查看参数

使用快捷键“Command+P”可以看出initViews方法的参数定义,在输入这个方法的时候就会自动弹出这个提示了。

那么如果想显示整个方法的文档呢?例如要查看系统方法的API文档,或者是自己写的方法的注释,可以使用快捷键“F1”查看API文档,如图3.20所示。

操作与导航 - 图7 图3.20 查看文档

如果你想像使用Eclipse一样,当鼠标放上去的时候就显示文档的提示,那么可以在设置中进行设置,Editor-General-Show quick documention on mouse move,如图3.21所示。

操作与导航 - 图8 图3.21 文档悬浮提示

这个功能有时候并不好,在代码较多的时候,鼠标悬浮即可看见文档会导致阅读代码时经常被弹出的文档打断,影响使用体验。而且自动弹出悬浮提示也比较耗性能,开发者可以根据自己的需要来决定是否开启。

快速行操作

通过快捷键“Command+Shift+Up\Down”,可以迅速地将一行移动到上面一行或者下面一行,而不需要通过剪切来进行两行的交换。

那么如何删除一行呢?默认的快捷键是“Command+Backspace”,但是这两个键按起来不是很方便,所以笔者通常采用快捷键“Command+X”的方式进行删除行的操作(该操作实际上是剪切行操作)。

类似的方式,复制一行也有相应的快捷键“Command+D”(该快捷键在Eclipse中是删除行,需要习惯一下)。通过这个快捷键,开发者可以迅速复制上一行的代码,同时将光标停留在变量名的地方,方便开发者直接进行修改。

快速断点

当开发者在进行代码调试时,如果碰到要在循环体中打断点,但是却只需要在某种情况下才断,例如i==5时,那么使用条件断点就可以非常方便地做到这一点。

条件断点与普通断点一样,直接在左边的编辑面板上点击就能生成,而要给一个普通断点增加条件功能,只需要在普通断点上单击鼠标右键,在弹出菜单的Condition中填入断点条件即可,如图3.22所示。

操作与导航 - 图9 图3.22 条件断点

同时,在这里还能启用、停用一个断点,点击Enable复选框即可实现。除了条件断点之外,开发中还有一种断点用得比较多,那就是临时断点。在调试时,开发者可能会临时增加一些断点,而这些断点并不是开发者一直需要的。也就是说,开发者实际上只想让这个断点执行一次,下次就不想在这个地方继续执行断点了,那么这个时候,临时断点就派上用场了。要增加一个临时断点也非常简单,只需要执行快捷键“Command+Option+Shift+F8”即可将当前行作为临时断点。如图3.23所示。

操作与导航 - 图10 图3.23 临时断点

临时断点与普通断点的区别就在于临时断点上有一个数字“1”,当临时断点执行一次后,这个断点就会自动消失,不需要开发者手动取消了。

异常断点

设想一种场景,测试拿着手机过来说,App崩溃了需要处理,你要如何去做呢?通常的办法是先复现问题,然后用ADB抓Log找出具体的异常原因,再结合代码分析。然而有了Android Studio,就完全不需要这么麻烦了!

举个例子,程序中最常见的Crash莫过于NullPointerException了,如何在程序中可能出现NullPointerException的地方都打上断点呢?其实根本不需要这么做,开发者只要打开Run-View breakpoints界面,点击右上角的“+”,选择Java Exception Breakpoints,并输入要监听的异常即可,如图3.24所示。

操作与导航 - 图11 图3.24 异常断点

如图3.24所示,笔者在这里选择监听NullPointerException。那么在程序运行的时候,不需要设置任何断点,只要App因为NullPointerException异常而导致崩溃,系统就会在对应的地方自动断点并暂停,如图3.25所示。

操作与导航 - 图12 图3.25 异常断点信息

这个功能可能很多开发者都不知道,但是在通过Log文件的崩溃信息调试程序的时候是非常有用的,可以快速定位到错误的代码。

日志断点

开发者经常会遇到这样的情况,整个工程的代码已经写完了,突然出现一个bug需要加一行Log进行调试,因为这一行Log要把整个工程都编译一遍,这是非常痛苦的事。而实际上,Android Studio已经提供了针对这个问题的解决方案,那就是日志断点。

例如下面这个例子,开发者需要在每次循环中打出一句Log,但是又不想增加一行Log,如图3.26所示。

操作与导航 - 图13 图3.26 日志断点

此时可以使用日志断点来增加Log而不需要修改代码。首先,你需要在要断点的地方打上一个普通断点。然后在断点上单击鼠标右键,选择suspend属性为false,并在下面的Log evaluated expression中写入日志信息即可,如图3.27所示。

操作与导航 - 图14 图3.27 日志断点信息

这样设置后,在程序运行时就不用重新编译,而且会在断点处打出你需要的日志信息。

多重选择

Android Studio提供了很多高级的编辑技巧,可以让代码的编辑变得非常方便。例如对文本的多重选择功能。当代码的上下文中有很多相同的代码,而开发者又需要同时对这些代码块进行操作时,就可以使用多重选择功能。例如将好几个private修改为public,好几个int修改成float等,如图3.28所示。

操作与导航 - 图15 图3.28 多重选择

只要将光标放在第一个int处,使用快捷键“Control+G”就可以选中第一个int,再按一次快捷键“Control+G”就可以选中第二个int。以此类推,全部选择完毕后,只需要一次修改就可以完成所有的修改。另外需要注意的是,这个快捷键不仅可以选择类似int、private这样的修饰符,当多个变量中包含相同的命名时也可以使用。例如firstX、secondX中的X,同样可以使用这种方式进行修改。

除了通过相似性进行多重选择,Android Studio还提供了通过列进行多重选择的方式,如图3.29所示。

操作与导航 - 图16 图3.29 列选择

要实现如图3.29所示的多重选择,只需要按住“Option”键并拖动即可。除了使用上面两种方式进行多重选择之外,与Sublime类似,Android Studio也支持多光标的操作方式,如图3.30所示。

操作与导航 - 图17 图3.30 多光标编辑

如图3.30所示,在要修改的地方,通过快捷键“Option+Shift+鼠标点击”就可以增加一个新的编辑光标,从而对多个地方进行同时修改。

快速完成

在Android Studio中,很多地方的操作都是可以偷懒的。通过使用快捷键“Command+Shift+Enter”,在很多地方可以让Android Studio快速完成某些操作。例如方法体大括号的添加、行尾分号的添加、自动格式化该行等操作。笔者现在基本上每写完一行代码,都会使用这个快捷键来补全、格式化,非常有用。

代码提示

代码提示是一个IDE的重要功能之一,Android Studio提供了非常强大的智能提示,通过使用快捷键“Control+Space”就可以在代码的任何地方调出代码提示,如图3.31所示。

操作与导航 - 图18 图3.31 代码提示

在使用代码提示时,有一点需要注意的是,当显示出候选的提示后,通过Enter键可以完成提示的输入。另外,通过Tab键同样也可以完成提示的输入,区别是它会将后面已经输入的提示全部删掉,而Enter键会保留后面的输入。

除了使用快捷键“Control+Space”获取代码提示之外,在Android Studio中,IDE还提供了快捷键“Control+Shift+Space”以显示更加智能的代码提示。通常情况下IDE可以根据上下文来获取更为丰富的代码提示,如图3.32所示。

操作与导航 - 图19 图3.32 智能提示

代码提示不仅可以用于代码编写的过程中,在程序出现错误时,也可以借助快速完成快捷键“Option+Enter”获取代码修改提示。例如,笔者使用快捷模板logi,产生一条Log日志,IDE会自动生成如下所示的代码。

  1. Log.i(TAG, "onCreate: ");

这时在TAG变量上使用快捷键“Option+Enter”,选择“Create constant field‘TAG’”即可,如图3.33所示。

操作与导航 - 图20 图3.33 快速修复

对于笔者所举的这个例子来说,IDE已经内置了logt快捷模板来生成如下所示的代码。

  1. private static final String TAG = "MainActivity";

不管通过哪种方式,Android Studio的提示功能都是非常全面的。通过提示,可以让Android Studio指出开发者代码存在的潜在风险和优化的方法,帮助开发者完成更好的代码。

调试中计算变量的值

在调试过程中的一些使用技巧,在《Android群英传》中已经进行了介绍。这里补充一点,在调试过程中只要按住Alt键,点击代码中的表达式,即可显示表达式的值。其他的调试技巧,开发者可以参考《Android群英传》中Android Studio的相关内容。

设置变量命名代码风格

根据Google的代码风格指南,类的成员变量通常要以m开头,而静态成员变量通常要以s开头。因此,你可以在设置中设置变量的命名规则,如图3.34所示。

操作与导航 - 图21 图3.34 变量前后缀

在Field的Name prefix中设置m,在Static field的Name prefix中设置s。这样在输入一个变量的名字时,就可以自动补全m或者s,如图3.35所示。

操作与导航 - 图22 图3.35 变量命名

同时在Extra代码的时候,生成的代码都可以自动根据这个规则重构。

查看大纲

当项目很大的时候,通过使用快捷键“Command+F12”,可以调出大纲界面,即显示方法和成员变量列表,如图3.36所示。

操作与导航 - 图23 图3.36 查看大纲

通过输入方法名,可以快速定位到方法。同时它还支持模糊查询,查询方法的一部分关键字也能进行筛选,如图3.37所示。

操作与导航 - 图24 图3.37 大纲筛选

通过这种方式,开发者可以快速找到想要搜索的方法。

书签

在接手老项目的代码或者在调试代码时,往往需要分析代码的思路,经常需要记录一些关键的代码、方法。这时候使用书签来记录就是最好的方式,类似在Chrome中添加书签,通过快捷键F3可以将一处代码添加到书签或者从书签中删除,如图3.38所示。

操作与导航 - 图25 图3.38 书签

添加到书签的代码,在行数旁边会有一个小钩,同时在Favorites标签中,可以找到相应的Bookmarks,如图3.39所示。

操作与导航 - 图26 图3.39 显示书签

另外,通过快捷键“Command+F3”,可以调出书签面板,显示所有的书签,如图3.40所示。

操作与导航 - 图27 图3.40 显示所有书签

这个工具对于记录代码中的关键点非常有用,有利于分析代码结构。

附加调试

开发者一定遇到过当项目很大时,编译一次需要很长时间,而这时候又需要调试程序的情况。那么除了直接使用Debug运行程序以外,还可以使用attach to debugger的方式。

在ADB连接手机的情况下,点击attach to debugger按钮并选择要调试的程序(只能调试Debug签名的App),即可进入调试模式,不需要通过Debug运行程序,如图3.41所示。

操作与导航 - 图28 图3.41 附加调试

这种调试方式在项目开发中使用得非常多,毕竟一个大的项目,如果使用Debug模式进行运行会非常卡。而通过附加调试的方式就可以以正常的方式进行程序运行,然后再进行调试了。

其他操作技巧

Android Studio还有很多其他操作技巧,这里不再一一列举,只是简单进行一下功能描述。

  • 代码折叠

通过快捷键“Command+-”和“Command++”,可以对一段代码进行折叠和展开,如图3.42所示。

操作与导航 - 图29 图3.42 代码折叠

  • 在文件系统中打开文件

按住Command键并点击打开的代码Tab页,就可以在文件系统例如Finder中打开代码文件。或者选中文件,单击鼠标右键,选择Reveal in Finder同样可以在文件系统中打开文件,如图3.43所示。

操作与导航 - 图30 图3.43 在文件系统中打开

  • 预览方法定义

开发者在调试代码的时候,如果想查看某个方法的定义,但又不想跳转到方法所在的类,那么就可以使用快捷键“Command+Y”在当前页面上对指定方法进行预览,如图3.44所示。

  • 拆分窗口

通常情况下,在编辑界面只有一个界面。通过窗口拆分,可以同时展示更多的界面。在菜单栏中选择Window→Editor Tabs→Split vertical\horizontal,这样就可以在整个编辑区域显示多个编辑界面,不论是进行代码对比还是查看都非常方便。

  • 相关文件

对于Activity来说,通常都有与之对应的XML布局文件。这些布局文件作为Activity的相关文件会被标记在类的最前面,如图3.45所示。

操作与导航 - 图31 图3.44 预览方法定义

操作与导航 - 图32 图3.45 相关文件

点击这个标记,就可以关联到相应的XML文件。很多地方都会出现这样的标记,例如颜色、图标等,这些相关联的内容可以通过点击这些标记进行跳转。

  • 查找快捷键

由于笔者的电脑是Mac系统,因此很多快捷键在Windows平台上是无法使用的,那么使用其他平台系统的开发者如何才能找到对应的快捷键呢?答案非常简单,打开设置中的Keymap,如图3.46所示。

操作与导航 - 图33 图3.46 Keymap

在下拉框中,Android Studio内置了各个平台的快捷键模板,通过切换可以找到对应的平台,例如Mac。找到需要查找的快捷键,记住其名称,再切换回自己系统的快捷键,通过名称找到对应的快捷键即可。而且在旁边的输入框中,Android Studio还提供了通过输入按键进行快捷键查找的方式,非常方便。