Android中文API
ADC-Android API Android SDK Android Studio
当前位置: 主页 > Android SDK >

Android Studio学习【三】:使用 Android Studio 编程

时间:2017-04-21 15:07来源:未知 作者:admin 点击:
本章包含如何在Android Studio中书写或生成代码。 Android Studio 使用面向对象编程的思想来生成极其相关的和格式规范的代码。本章的特色体现在重载方法,Java块的包围语句,使用模板插入
本章包含如何在Android Studio中书写或生成代码。 Android Studio 使用面向对象编程的思想来生成极其相关的和格式规范的代码。本章的特色体现在重载方法,Java块的包围语句,使用模板插入代码,自动补全,注释代码和移动代码,如果你读这本书的目标是要精通Android Studio,那么你需要密切关注这章,因为所描述的工具和技术将在你的编程效率发挥最大的作用。
让我们开始吧,若是在第一章创建的 HelloWorld 应用程序还没有打开,请前往打开。

 使用代码折叠
代码折叠是一种在编辑器中保存屏幕实际使用空间的方式,代码折叠允许你去隐藏特定代码块以便于于你可以充分地集中注意力在你感兴趣的代码块上,如果MainActivity.java 没有打开,按Ctrl+N | Cmd+O 并输入Main,按Enter键打开MainActivity.java 的类,如图3-1

图3-1 使用输入类名对话框来打开MainActivity.java

如果行号默认没有显示,导航到Help ➤ Find,输入show line numbers并且勾选Show Line Numbers Active Editor这一项,如图3-2.


图3-2 使用输入Action或者选项名对话框来显示行号

正如你在MainActivity.java中所观察到的行号,你将会注意到一些奇怪的情况:行号不是连续的,在图3-3中,行号从1,2,3开始,然后就跳跃到7,8,9了,仔细观察图3-3的第3行,你会发现这里在import语句的左边有一个包含了“+”的方块,同时随后是省略号,如果你仔细观察你的代码,你也会注意到这个省略号用浅绿色高亮显示,这些可见的元素提示你Android Studio 正隐藏被折叠的代码块

图3-3. 在import 语句的折叠代码块

位于左边留空处是折叠边框形成的细虚线,同时介于灰色留空与白色编辑器之间,折叠边框包含了三个图标:位于小方块的内部"+"号(正如图3-3的第3行)和有着水平线在里面的上下箭头,向下的将头表名是一个可折叠代码块的开始部分,同时向上箭头指示它的结束部分,上文提到的"+"号,表明某个代码块已经被折叠了,点击这些图标中的任意一个将会切换对应代码块为折叠还是打开状态,表3-1包含了代码折叠操作的描述和快捷键。

把你的光标放在 MainActivity.java 的onCreate() 方法中,现在长按Ctrl+Period | Cmd+Period 来切换他的代码块展开或折叠,此外,也可以用快捷键Ctrl+数字键"+"或者Cmd+数字键"+"展开代码、也可以用快捷键Ctrl+数字键"-"或者Cmd+数字键"-"折叠代码。
总之通过点击在折叠边框内的代码折叠图标折叠/展开你的代码块,记住,折叠单个块,多个块,或一个文件的所有块,是为了节省屏幕空间从你的视线中删除了,然而当你bulid的时候,编译器仍然会编译他们。类似的,折叠一个包含了问题的、有错误的代码的块将不会从标示条删除任何警告或者出错。你若要改变代码折叠的选项,请选择通过菜单选线进入Settings ➤ Editor ➤ Code Folding.

使用代码补全

现代大多数编译器都会提供一些代码补全的格式,Android Studio也不例外,Android Studio乐意帮助,就算你不主动去寻求帮助,实际上,Android Studio将为你各种各样的的默认提醒来随着你的输入完成你的代码。这些Android Studio自动生成的默认提醒列表可能是不完美的,但是这些提醒是根据最佳实践得到来设置的,并且它们通常遵循很好的命名规则。Android Studio可以很好地理解Android SDK和java程序设计语言;事实上,它可能知道那些问题,远远超过你所知道的,如果你以谨慎和热忱的心态学习这个工具的使用,你最终将会看起来想一个摇滚歌手,不管你的之前的编程经验是什么。
这个代码补全的特点是对上下文敏感的,在此条件下,这些补全根据你的光标所在的范围来提供给你不同的提醒,比如,你正在键入一个类范围内的代码,代码补全的提醒将是不同于你在方法范围内键入的代码,即使你选择不接受这个代码补全提醒,基于上述理由,你也需要注意他们。
表3-2列出了4种在Android Studio中的代码补全:
- 一旦你键入代码,默认的代码补全功能会自动启作用
- 基本的代码补全不仅扮演着类似于默认代码补全的功能,还在提醒列表中的当前选项的旁边展示了一个Javadoc的窗口
- 精妙的代码补全同时扮演者Javadoc的功能之外,还有生成一个更敏感的相关的提醒列表
- 循环地扩展单词环,允许你选择在已用过的源代码单词

让我们开始编码来演示代码补全是怎么工作的,在包com.apress.gerber.helloworld右键(Mac中是Ctrl-单击),并选择 New ➤ Java Class 来创建新的类对话框,如图3-4所示,吧这个类命名 Sandbox 并点击OK

创建新的类对话框
Sandox.java的Sandbox 类的大括号内部,定义一个私有变量,如图3-5,一个代码补全的菜单出现了,并列出了可能的选择帮你完成你的嗲吗,使用上下箭头键来导航代码补全的菜单,使用下键选择List<E>这个选项并回车。

图3-5. 当你开始输入的时候出现的一个代码补全的菜单
Android Studio的默认行为是当你开始键入时,出现代码补全提醒列表,你不需要激活任何快捷键来调用这个默认的代码补全——他是自动出现的。你应该现在有一行私有 List的代码,如图3-6,直接跟随这个单词列表,键入左尖括号用以定义在java中的泛型,注意Android Studio关闭了括号语句用封闭的右尖括号,并把你的光标置于括号中

图3-6. 字符串作为泛型的列表的代码补全
 在尖括号的Str类型,按下Ctrl+Space调用基本代码补全功能。你将会注意到一个String的Javadoc窗口的文档在提醒列表中出现当前选中项(String) ,滚动 Javadoc 窗口可以看到对String的Javadoc文档说明,点击向上箭头,Javadoc窗口将展示出详细的String API文档在你的默认浏览器,返回 Android Studio 并选择String 作为泛型类,你将会使用的,按Enter 键定义出List<String>。
Android Studio的特色之一是它会为你提醒变量名,直接键入一个空格后,私有 List<String>通过按Ctr+空格出现基本的基本代码补全,Android Studio生成一个提示列表,但是上述变量名都不足于描述,因此只能键入mGreetings。小写字母m 代表成员(即域),把类的成员名用m作为前缀在Android中是一种命名约定。同样的,静态类成员用小写字母s作为前缀,你不需要遵循这种命名约定,但是你的代码会更容易被别人阅读如果你遵循了,记住局部变量(方法作用域内)不允许用m和s作为前缀约定,修改你的代码行为List<String> mGreetings = new。按 Ctrl+Shift+Space调用智能代码补全,选择ArrayList<>()完成语句,还包含了终止的分号,如图3-7,类似于基本代码补全,在生成提醒列表的时候,还比默认的和基本代码补全范围增多了,比如,当使用智能代码补全在赋值操作的右边,提醒列表通常包含了相关的工厂方法。

注如果你的在 Android Studio 的JDK版本是7或者更高,通过代码补全的生成的代码可能是用菱形标记,比如,在使用泛型的赋值语句来定义的右边,ArrayList<String> 可能出现为ArrayList<>。

图3-7 智能代码补全

循环扩展词是一个花哨的名字,但是它实际上非常简单。调用循环扩展词只需按下Alt键,同时按住"/"键几秒钟,单词集合里提供你同样的单词,他们都曾出现在你的文档里,由于你的循环遍历这些单词,注意黄色高亮部分,现在调用循环扩展词,长按Alt + Shift +"/",注意到提供并高亮的单词现在向下远离你的光标,而非向上远离。

注释代码
如果你已经完成了所有的编码工作,你了解到,有些代码行是一些注释,将会被编译器忽略,但是包含了信息或者元数据,数据是非常重要的,对于编码者和协同编码者,注释可能是行注释,以”//"开始,也可能是块注释,以"/“开始,以”/“结束,从主菜单可以看出,你可以激活注释,只需选择Code ➤ Comment.,然而,最好的方法是通过快捷键来截获,如表3-3所示:

类型重构初始化被构造,并放在mGreetings 声明的上面,Ctrl+/ | Cmd+/ 把其转化为注释,如图3-7,在开启和关闭注释切换实验,只需使用快捷键Ctrl+/ | Cmd+/.
使用代码生成
恰当的使用代码生成功能,这一特色将为你节约大量的时间,代码生成是生成各种方法的的强大功能,包括了构造,getters, setters, equals(),hashCode(), toString(),方法等等。在你使用代码生成之前,确认Android Studio 是配置好了,可以忽略成员名称的前缀,如m和s,点击File ➤ Settings ➤ Code Style ➤ Java ➤ Code Generation将得到设置对话框,将会出现代码生成的标签页,如果域和静态域文本框不包含m和s,则键入他们并点击”应用“和”确定“,如图3-8.

图3-8 加入m和s到代码生成标签页的域和静态域
构造器
把你的光标放在Sandbox.java的类范围中。为了在Android Studio生成一个构造器,按Alt+Insert | Cmd+N 并选择 Constructor,那么选择的域被构造对话框初始化,如图3-9,选择类成员作为参数。我们非参数构造器,因此点击None这个按钮。在Java中,是很常见的,就是重载构造器,通过不同类型的参数和不同数量的参数,比如,你可以调用这个对话框来生成一个带List<String>参数的构造器,并且为成员变量mGreetings赋值。

通过构造对话框来选择要初始化的域。

Getters/Setters
Java类通常是封装好的,这意味着类成员通常声明为私有的,并且访问这些成员的公共接口是通过公有访问器(getter)和公有修改器(setter)方法爱提供的。在Sandbox.java类域范围内点击你的鼠标。并且按Alt+insert( Cmd + N)。你会注意到有一个选项是Getter,一个为Setter,还有Getter和Setter的组合。Getter和setter
方法一般都是成对出现的,除非你有一个很好的理由要省略其中一个或着另一个,否则最好是生成后面的组合选项。从列表中选择Getter and Setter, 如图3-10所示。在随后的选择字段生成getter和setter对话框中,从列表中选择mGreetings:List<String>列表并点击OK。你的类现在为变量mGreeting有了getter和setter,如图3-11。请注意,生成的代码忽略了m前缀,在生成方法名称的时候,因为你在之前的设置中把m和s设置为了前缀。

生成访问器和修改器


生成访问器和修改器方法
方法重载
代码生成是理解类继承结构的,所以你可以覆盖包含在任何父类或接口实现的方法。Sandbox.java 是一个简单的普通java对象(POJO)。现在你修改Sandbox类来继承RectShape。当你输入继承RectShape时,这个词RectShape可能以红色突出显示。如果适合你需要的情景,按Alt + Enter来导入RectShape类,如图3-12所示


继承超类

如果你通过按Ctrl+H调用了层次结构视图,您将看到带有RectShape的Sandbox的类层次结构,Shape,和Object作为它的祖先,可以通过观察图3-13,你可以明白。现在按Alt +Insert | Cmd + N并选择覆盖方法。让我们重写Shape的hasAlpha()方法,如图3 - 14所示。自java 5 版本开始的约定:要用@Override来注解想覆盖的方法,我们选中@Override复选框并插入。@Override注解告诉编译器来验证方法的名字和签名,以确保该方法事实上已被覆盖。修改hasAlpha()的返回值为true。

在RectShape中选择要覆盖/实现的方法


修改hasAlpha( )方法

toString( )方法
Android Studio 可以为你生成toString()方法。让我们为Sandbox创建一个toString()方法,同时也包括mGreetings成员。按Alt +Insert| Cmd + N并选择toString()。选择你的唯一成员——mGreetings,并单击OK。Android Studio生成一个返回字符串,如“Sandbox{“+”mGreetings = " + mGreetings +‘}’,如图3-15。如果在类中有多个成员,可选择他们,他们也会被附加到这个方法的返回字符串。当然toString()方法生成的代码并不是一成不变的,这个方法是可以改变为任何你想要的,只要它返回是一个字符串。


图3-15 生成toString()方法

委托方法
Android Studio知道你的类成员,从而允许您从一个代理委托行为方法中定义类方法的类成员。这听起来很复杂,但它很容易。为了给你展示委托方法的选择是如何工作的,让我们转到代码中来看。在Sandbox.java,把你的光标放在类范围内。按Alt +Insert | Cmd + N,然后选择 Delegate Methods。选择mGreetings:List<String>并按下OK。列表接口有很多方法,你都可以委托行为。为简单起见,选择添加(object:E):boolean,如图3-16。如果你想委托多个方法,在选择这些方法的时候,按住Ctrl键(Cmd键在Mac),单击OK。


选择要生成委托的方法
在Sandbox.java中生成的add()方法现在是一个代理,代表mGr