Android开发范例实战宝典(光盘内容另行下载,地址见书封底)(txt+pdf+epub+mobi电子书下载)


发布时间:2020-09-06 09:45:44

点击下载

作者:武永亮

出版社:清华大学出版社

格式: AZW3, DOCX, EPUB, MOBI, PDF, TXT

Android开发范例实战宝典(光盘内容另行下载,地址见书封底)

Android开发范例实战宝典(光盘内容另行下载,地址见书封底)试读:

前言

2003年有“Android之父”之称的Andy Rubin在美国创建了Android科技公司。当时他的想法就是使移动设备更好地服务于人类。直到2005年,Google公司收购了Android科技公司,这才真正吹响了Google进军移动领域的号角。随后几年,Android一发而不可收拾,一跃成为了当前炙手可热的智能手机操作系统。

自2009年发布的第一个Android系统以来,仅仅几年时间,Android已经成为了使用最多的智能手机操作系统。这是与Android具有的以下几个特点分不开的。(1)Android支持多种硬件设备,包括照相机、录像机和陀螺仪等,还有各种传感器。(2)Android支持各种移动设备的网络,包括GSM/EDGE、IDEN、CDMA、EV-DO、UMTS、Bluetooth、Wi-Fi、LTE、NFC和WiMAX等。(3)Android内置的网页浏览器基于WebKit内核,并且采用了Chrome引擎。Android 2.2版及之后的版本能原生支持Flash,在Android 4.0版内置的浏览器测试中,HTML 5和Acid 3故障处理,均获得了满分。(4)Android支持多种媒体格式,包括WebM、H.263、H.264(in 3GP or MP4 container)、MPEG-4 SP、AMR、AMR-WB(in 3GP container)、AAC、HE-AAC(in MP4 or 3GP container)、MP3、MIDI、Ogg Vorbis、FLAC、WAV、JPEG、PNG、GIF和BMP等。如果用户需要播放更多格式的媒体,可以安装其他第三方应用程序。

这些特点使得Android系统在智能手机领域中具有不可动摇的地位。

目前,图书市场上的Android图书非常多,但也非常同质化,都以罗列Android开发技术为主,鲜见一本详细介绍Android常见开发实例的书。为了帮助读者更好地学习Android开发,笔者结合自己近几年的Android客户端开发经验和心得体会,花费了一年多的时间编写了本书。在本书中给出了笔者学习Android开发的各种问题总结及开发过程中遇到的各种问题的解决方案。希望读者能在本书的引领下跨入Android开发大门,并成为一名合格的Android开发人员。

本书重点讲解了200多个常见的Android开发实例,并对每个实例专门录制了配套多媒体教学视频,以辅助读者学习,这些教学视频和书中的完整实例源代码一起收录于配书光盘中。学习完本书后,相信读者应该可以具备较好的Android开发能力。本书特色

1. 实例丰富,代码精讲

本书详细讲解了200多个常用的Android开发实例,并对重点代码做了大量注释和讲解,以便于读者更加轻松地学习。通过对这些实例的演练,可以快速提高读者的开发水平。

2. 内容全面,涵盖广泛

本书介绍了Android开发的环境搭建、界面开发、事件处理、信息传递、数据存储、网络编程、服务和广播及多媒体开发等内容,覆盖了Android开发的方方面面,几乎涉及Android开发的所有重要知识。

3. 由浅入深,循序渐进

本书中的实例安排遵循从基础到高级的学习梯度,从Android开发的基础开始讲解,逐步深入到Android开发的高级技术及应用。讲解由浅入深,循序渐进,适合不同层次的读者阅读。

4. 教学视频,高效直观

作者专门为每一个实例都录制了详细的配套多媒体教学视频(总长达14.2小时),以便让读者更加轻松、直观地学习本书内容,提高学习效率。这些视频与本书源代码一起收录于配书光盘中。

5. 技术支持,答疑解惑

读者阅读本书时若有疑问可发E-mail到bookservice2008@163.com以获得帮助,也可以在本书的技术论坛(http://www.wanjuanchina.net)上留言,会有专人负责答疑。本书内容及体系结构

第1章 打开Android世界的大门

本章主要介绍了Android的发展历史及框架结构。通过本章的学习,读者可以了解Android的发展历史及Android的平台架构知识。

第2章 Android开发者必备利器

本章主要介绍了Android开发环境的搭建,并给出了第一个Android程序,还介绍了Android开发过程中常用的调试工具,包括Logcat、DDMS和ADB等。通过学习本章内容,读者可以搭建好Android开发环境,并了解最简单的Android程序的开发过程。

第3章 让你的程序变成美女

本章涵盖53个开发实例,介绍了Android中常见的界面开发技术,其中重点介绍了基本控件的使用和常见的高级控件的使用。通过学习本章内容,读者可以构建出各种各样的Android程序界面。

第4章 让你的程序和用户说话

本章涵盖38个开发实例,介绍了Android中的事件处理机制及多线程处理机制。通过学习本章内容,读者可以实现Android程序与用户的各种交互。

第5章 Android程序内部的信息传递者

本章涵盖24个开发实例,介绍了Android中的Intent的使用,其中包括调用系统的Intent和自定义Intent的使用方法。通过学习本章内容,读者可以掌握在Android中通过Intent启动内部或外部应用程序。

第6章 Android的数据存储

本章涵盖16个开发实例,介绍了Android中的数据存储方式,主要有文件存储、ContentProvider和SQLite存储。通过学习本章内容,读者可以掌握Android中数据存储的具体方式。

第7章 Android的服务与广播

本章涵盖37个开发实例,介绍了Android中的Service和BroadCastReceiver的使用方法。通过学习本章内容,读者可以全面了解Android服务和广播所能实现的具体应用。

第8章 Android的网络编程

本章涵盖14个开发实例,介绍了Android中网络编程的相关知识,主要包括网络数据的请求获取和常见数据格式的解析。通过学习本章内容,读者可以让自己的应用具有网络访问的能力,并且可以对得到的数据进行数据解析。

第9章 Android中的多媒体开发

本章涵盖19个开发实例,介绍了Android中的多媒体开发技术,包括相机、录音机和播放器等。通过学习本章内容,读者可以轻松实现常见的与硬件相关功能的开发。本书超值DVD光盘内容

□ 本书各章涉及的实例源文件;

□ 14.2小时本书配套教学视频;

□ 8.7小时Android开发入门教学视频;

□ 13.8小时Android开发实战教学视频;

□ 11小时Android项目案例开发教学视频。本书读者对象

□ 有一定基础而想提高Android开发水平的人员;

□ 想全面学习Android开发技术的人员;

□ Android专业开发人员;

□ 利用Android做开发的工程技术人员;

□ Android开发爱好者;

□ 大中专院校的学生;

□ 社会培训班的学员;

□ 需要一本案头必备手册的程序员。本书作者

本书由武永亮主笔编写,其他参与编写的人员有陈晓建、陈振东、程凯、池建、崔久、崔莎、邓凤霞、邓伟杰、董建中、耿璐、韩红轲、胡超、黄格力、黄缙华、姜晓丽、李学军、刘娣、刘刚、刘宁、刘艳梅、刘志刚、司其军、滕川、王连心、沃怀凯、闫玉宝、欧振旭。作者致谢

时光荏苒,转眼间从我想写一本Android开发方面的图书,到今天这本书的完成,历时大概一年有余,经过了很多个不眠之夜。当然,在此期间也有很多人在默默地帮助我。在此。我要特别感谢这些人。

感谢我的爱人!她把家里整理的井井有条,每当我遇到挫折的时候她都默默地陪在我身边。

感谢我的两位老师!王顶老师是我的启蒙恩师,是他把我领进了计算机的世界,让我看到了计算机世界的美妙之处。还有李文斌老师,他是我的领导,也是给我帮助最大的人,正是由于他对我严格的要求和帮助,我才能在人生和职业的道路上走的更远。

感谢我的学生!在我教学的过程中他们给了我很多启发,正是在解答他们的很多困惑时,我也有了进一步的理解,这让我多了很多进步和成长的机会。

感谢马翠翠!她是一个非常务实的好朋友,正是因为她的鼓励,本书才按时完成。

虽然笔者对本书中所述内容都尽量核实,并多次进行文字校对,但因时间所限,可能还存在疏漏和不足之处,恳请读者批评指正。武永亮第1章 打开Android世界的大门

如果有人问我现在最火的手机操作系统是什么?我一定会说是Android。如果有人问我现在智能手机操作系统中占有率最高的是什么?我一定会说是Android。如果有人问我今后最看好的行业是什么?我也一定会说是Android。

我之所以这么肯定Android的市场,是因为Android现在确实很火。2011年5月,当时的Android设备激活量达到了1亿,2012年Android的设备激活量达到了4亿,截止到2013年,Android设备的激活量已经达到9亿,也就是说现在每天都会有1500万台Android设备被激活,预计到今年底Android设备的总激活数将达到10亿,这是一个多么惊人的数字。当然Android设备的大卖,不但给各大手机生产厂商带来了不小的收益,也给我们程序开发人员提供了一片新的土地。Google Play应用商店的APP下载数量已经突破485亿次,现在平均每月的下载量为25亿次,而且还在稳步增长。这样就为我们Android开发者提供了无限的商机。所以现在国内外对于Android手机开发者的需求量在逐年增大。

本书所介绍的所有实例都是在Android 4.2.2平台运行通过的,该版本是现阶段为止最新的Android操作系统,其中相对于之前的版本加入了许多特有的功能,以及特殊的修改。这个版本不但功能强大,而且稳定、高效,在Android各个操作系统的占有比率中也是名列前茅。本章是全书的基础,将会简要介绍Android的历史、现状,重点向读者介绍本书的应用场景及分布结构。1.1 Android的来龙去脉1.1.1 Android的发展简介

Android是一个以Linux为基础的开源操作系统,其主要应用于嵌入式设备。这里需要给大家澄清一点,之前大家了解的Android可能仅仅局限于手机,其实Android应用的嵌入式设备种类很多,其涉及的领域也很多。例如,车载领域中的导航系统,医疗领域中的电子诊断设备,在智能监控领域的智能摄像头等,这些已经在各个领域中占有一定的市场,当然现在家用的很多设备也有Android的身影。例如,Android系统的电视机,Android系统的电脑等。所以Android的应用领域不仅仅是手机。Android是由Google成立的OHA(Open Handset Alliance,开发手持设备联盟)领导和开发的。

Android系统最初是由Andy Rubin开发的,最早开发这个系统的目的是为了打造一个能与PC互动的智能相机网络,但后来智能手机市场开始爆棚,Android被改造成手机的操作系统。其2005年被Google收购,2007年Google与80余家硬件制造厂商、软件开发厂商和电信运营厂商成立OHA,共同改良Android系统。随后Google开发了Android的源代码,让各大生产厂商推出搭在Android系统的智能手机,再后来Android系统扩展到平板电脑、电脑领域。与此同时Google通过官方商店Google Play,向用户提供应用程序和游戏的下载,就这样在2010年末,根据有关数据显示,推出两年的Android已经超于称霸十年的诺基亚Symbian系统而成为全球第一大智能手机操作系统。

Android系统之所以这么流行,个人总结有以下特点:(1)Android操作系统几乎支持所有的网络制式,包括GSM/EDGE、IDEN、CDMA、BlueTooth和Wifi等等,这是任何一个手机操作系统都无法做到的。(2)Android操作系统由于是在Linux基础上发展而来的,所以它更像一个电脑操作系统。它几乎可以做电脑可以做的所有事,如Android原生系统就支持短信、邮件、网络访问、多语言功能、内置浏览器、支持Java、支持多种媒体格式的图片和视频等,凡是你能想到的电脑的功能都可以在Android的系统中找到缩影。(3)Android操作系统支持的硬件种类繁多,由于Android是由Google联合各大硬件厂商共同维护开发的,所以Android的操作系统支持的硬件种类繁多,如摄像头、电容电阻屏幕、GPS、加速器、陀螺仪、气压计、磁强计、体感控制器、游戏手柄、蓝牙设备、无线设备、感应和压力传感器等。(4)Android操作系统有强大的Google支撑,在原生的Android系统中会带有Google提供的各项服务,如Google地图服务、Google读书服务和Google语音服务等。这就相当于Android已经有了很强大的服务团队。

有了以上的几点,你还不动心吗?想做一个合格的Android开发工程师吗?安心的看完本书吧。1.1.2 Android的平台架构

Android系统是基于Linux系统发展而来的,使用的开发语言一共涉及到两种:底层采用C/C++来进行开发,上层应用采用Java语言来开发。Android系统的主要组成部分,如图1.1所示。图1.1 Android层次结构图

从图1.1中明显看到Android的系统分为五个层次,由下至上分别为Linux Kernel、Android Runtime、Libraries、Application Framework和Applications。它被叫做为一种“软件层叠结构”的方式进行构建,这种方式使得Android的各个层次之间相互分离,每个层次的分工明确,保证层次之间的关系,但是彼此都相互独立,降低了耦合性。对于这五个部分的功能介绍分别如下:

1. Linux Kernel层

Android基于Linux 2.6提供核心系统服务,例如,安全、内存管理、进程管理、网络堆栈和驱动模型。Linux Kernel也作为硬件和软件之间的抽象层,它隐藏具体硬件细节而为上层提供统一的服务。由于它的开发偏向于底层硬件,所以主要的开发语言为C/C++。

如果你只是希望做Android的应用开发,那暂时不需要深入了解Linux Kernel层。

2. Android Runtime层

Android包含一个核心库的集合,提供大部分在Java编程语言核心类库中可用的功能。每一个Android应用程序是Dalvik虚拟机中的实例,运行在他们自己的进程中。Dalvik虚拟机设计成在一个设备可以高效地运行多个虚拟机。Dalvik虚拟机可执行文件格式是.dex,dex格式是专为Dalvik设计的一种压缩格式,适合内存和处理器速度有限的系统。

大多数虚拟机包括JVM,都是基于栈的,而Dalvik虚拟机则是基于寄存器的。两种架构各有优劣,一般而言,基于栈的机器需要更多指令,而基于寄存器的机器指令更大。dx是一套工具,可以将Java .class 转换成 .dex格式。一个dex文件通常会有多个.class。由于dex有时必须进行最佳化,会使文件大小增加1~4倍,以ODEX结尾。

Dalvik虚拟机依赖于Linux内核提供的基本功能,如线程和底层内存管理。

3. Libraries层

Android包含一个C/C++库的集合,供Android系统的各个组件使用。这些功能通过Android的应用程序框架(application framework)暴露给开发者。下面列出一些核心库:

□ 系统C库——标准C系统库(libc)的BSD衍生,调整为基于嵌入式Linux设备。

□ 媒体库——基于PacketVideo的OpenCORE。这些库支持播放和录制许多流行的音频和视频格式,以及静态图像文件,包括MPEG4、H.264、MP3、AAC、AMR、JPG和PNG。

□ 界面管理——管理访问显示子系统和无缝组合多个应用程序的二维和三维图形层。

□ LibWebCore——新式的Web浏览器引擎,驱动Android 浏览器和内嵌的Web 视图。

□ SGL——基本的2D图形引擎。

□ 3D库——基于OpenGL ES 1.0 APIs的实现。库使用硬件3D加速或包含高度优化的3D软件光栅。

□ FreeType——位图和矢量字体渲染。

□ SQLite——所有应用程序都可以使用的强大而轻量级的关系数据库引擎。

4. Application Framework层

通过提供开放的开发平台,Android使开发者能够编制极其丰富和新颖的应用程序。开发者可以自由地利用设备硬件优势、访问位置信息、运行后台服务、设置闹钟、向状态栏添加通知等等。

开发者可以完全使用核心应用程序所使用的框架APIs。应用程序的体系结构旨在简化组件的重用,任何应用程序都能发布它的功能且任何其他应用程序可以使用这些功能(需要服从框架执行的安全限制)。这一机制允许用户替换组件。

所有的应用程序其实是一组服务和系统,包括:

□ 视图(View)——丰富的、可扩展的视图集合,可用于构建一个应用程序。包括包括列表、网格、文本框和按钮,甚至是内嵌的网页浏览器。

□ 内容提供者(Content Providers)——使应用程序能访问其他应用程序(如通讯录)的数据,或共享自己的数据。

□ 资源管理器(Resource Manager)——提供访问非代码资源,如本地化字符串、图形和布局文件。

□ 通知管理器(Notification Manager)——使所有的应用程序能够在状态栏显示自定义警告。

□ 活动管理器(Activity Manager)——管理应用程序生命周期,提供通用的导航回退功能。

5. Applications层

Android包括一个核心应用程序集合,包括电子邮件客户端、SMS程序、日历、地图、浏览器、联系人和其他设置。所有应用程序都是用Java编程语言写的,也是本书所介绍的主要内容所在。

以上所介绍的是Android的层次结构,在每个层次大家可能都会找到一些合适的职位。本书主要的内容在于讲解Android的上层应用开发,也就是使用已有的API构造常见的应用程序。希望各位读者能明确自己的开发定位。1.2 本书的目的及范例应用范围

截止到目前为止,现在市面上已经有很多很多Android开发的相关书籍,其中不乏有一些经典之作,但是有很多同学会向我反映:老师,我们看完了Android的书,但是还是无法去完成一款专业的应用程序,怎么办呢?我的答案就是:编程不是历史,它不但需要你有坚实的理论基础,最主要的是要去练习,其中的练习包括这么几个阶段:(1)能够了解Android程序开发的基础知识,如Android中是使用Activity来进行页面展示的。(2)能够看懂别人的程序,如遇到某个功能能够看懂类似的实例,然后可以进行修改完成。(3)能够看懂系统的代码,这个阶段相当于进阶阶段了,也就是你可以读懂Android系统的实现原理,不再停留在上层的API使用的阶段。(4)设计自己的应用,独立开发想要的各种需求。这个阶段你就已经把Android融会贯通了。

本书以200个使用范例组成,其中很多都是常见的应用程序中的某些固定功能模块,例如,微信的摇一摇功能,安卓市场软件的下载安装功能等。本书把常见的功能模块拆解成最简单的单元,大家看完这些事例后,会发现他们很简单的就可以出现在你的应用程 序中。

本书针对熟悉Java程序语言,并且了解Android程序开发基础知识的读者。当然,前者是必须的,如果对于Android一窍不通,但是你有一颗真心学会Android开发的心,我想你也能从本书获益良多。本书内容主要分为9章,每章内容都有自己的侧重点所在:

第1章打开Android世界的大门,主要介绍Android的发展史,以及本书的应用范围。

第2章Android开发者必备利器,主要介绍Android开发环境的搭建。

第3章让你的程序变成美女,主要介绍如何构造Android中漂亮的界面。

第4章让你的程序和用户交流,主要介绍如何让用户更好的和Android应用程序进行交互。

第5章Android程序内部的信息传递者,主要介绍如何在Android内部的组件之间传递消息。

第6章Android的数据存储,主要介绍Android中如何长期保存应用程序的数据。

第7章Android的服务与广播,主要介绍Android中的服务类软件如何开发及如何监听系统广播。

第8章Android的网络编程,主要介绍Android如何请求网络上的数据并进行解析。

第9章Android的多媒体开发,主要介绍Android的硬件相关的一些开发。

本书的所有范例采用统一编号,你从本书的目录就可看到,这些范例大多数都是根据我开发Android的应用程序的过程中总结而出的。现在市面上很少有以范例书的整体思路贯穿的,本书在范例的讲解上统一了讲解风格,以减少大家理解程序的时间,对于范例的结构,基本分为以下几点。

□ 实例简介:介绍本实例的应用场合;

□ 运行效果:通过截图的形式看到实例的运行效果;

□ 实例程序讲解:讲解实例中详细介绍了关键的代码和实现步骤;

□ 实例扩展:本部分主要介绍此实例可扩展的实例,或者需要大家在开发本实例中注意的地方。1.3 本书范例的使用方式

本书中所有的范例都经过作者在模拟机或者真机上反复测试,因为有些实例需要硬件的支持,在AVD上无法进行效果展示,如照相机效果、录音效果等。本书附带随书光盘,其中所有的200个范例都是在Eclipse中编译测试通过的。大家只需打开Eclipse导入工程即可运行,前提是你要参照第2章的内容配置好了Android的开发环境。个人建议大家在进行范例阅读的时候不要仅仅看范例的执行效果和代码,要尽量去想一下,在实际应用中什么地方可以使用此范例,是否可以进行改进,这样你的编程水平才可以迅速提高。1.4 参考网站

大家在阅读本书的过程中可能还需要一些知识的查询和翻阅,最主要的参考网站就是Google的开发者网站:http://developer.android.com/index.html。此网站是Android的开发者网站,其中包括了最新的Google提供的Android的开发者文档,以及最新的Android咨询。当然还有一些网站大家可以去参考,如下所示:

Eclipse的下载安装网站:http://www.eclipse.org/,在此网站下载安装Eclipse,并且可以进行Eclipse的进阶学习。

Java SE中JDK的参考文档:http://www.oracle.com/technetwork/java/javase/downloads/index.html,此网站提供了JDK的下载网址,并且提供了基本的JDK的开发者文档。

中国软件开发联盟网站:http://www.csdn.net/,这就是中国开发者联盟网站也就是通常所说的CSDN。

全球IT界最受欢迎的技术问答网站:http://stackoverflow.com/,此网站中大家可以发表问题并且接受全世界的高手的指点。

以下两个是我们开发人员最常用的实例搜索网站。

谷歌的开源代码搜索站:https://code.google.com/intl/zh-CN/,在此网站大家可以搜索到你想要的开源代码实例。

GitHub网站:https://github.com/,在此网站上大家可以托管共享你的代码工程,而且也可以看到别人托管的开源工程。

合理使用以上网站会给你的开发道路奠定坚实的基础。那让我们开始学习Android的旅途吧。第2章 Android开发者必备利器——开发环境搭建

要想进行Android应用的开发,需要提前进行一些准备工作,本章就来学习在Android开发前需要进行的准备工作。其中主要包括Android开发所需要的软件、硬件及开发环境的配置。

本章主要带领大家一起进行Android的开发环境的搭建,以及在开发过程中常用工具的使用。希望大家阅读完本章内容后,可以在自己的电脑上独立搭建自己的Android开发环境,熟练掌握Android常用工具的使用。2.1 搭建Android开发环境2.1.1 准备工作

Android是Google推出的智能手机操作系统,其开发环境总体也分为三大平台。

□ Windows开发平台:Eclipse+ADT+Android SDK for Windows。

□ Linux开发平台:Eclipse+ADT+Android SDK for Linux。

□ MAC OS开发平台:Eclipse+ADT+Android SDK for MAC。

其中每个平台的开发环境的搭建思路大致都是一致的。大体分为,首先搭建Java开发环境,然后下载安装Eclipse开发工具,然后下载对应的Eclipse版本的ADT插件,然后下载对应的Android SDK,最后进行配置即可。本书的开发环境是在Windows平台下进行搭建的,所以本章节仅介绍在Windows平台下如何进行Android开发环境的搭建。如果使用的是其他的操作系统平台的话,请参考谷歌官网为开发者提供的开发环境搭建步骤,地址是http://developer.android.com/intl/zh-CN/sdk/index.html。

在Windows下搭建Android开发环境首先要具有一台安装了Windows XP(32-bit)或者Vista(32- or 64-bit)或者Windows 7(32- or 64-bit)的电脑。然后才可以进行下面的操作。2.1.2 安装JDK,配置基本Java环境

首先,下载安装JDK,打开Java官网,效果如图2.1所示。

地址为:http://www.oracle.com/technetwork/java/javase/downloads/index.html?ssSourceSiteId=ocomen,单击图中红色方框中的内容,进行JDK的下载。截止本书写作时间为止,Java官网提供的最新的JDK为jdk-7u17-windows-i586.exe。大家可以进行下载安装。安装过程如下:图2.1 JDK官网(1)双击JDK7安装程序,单击“下一步”按钮,如图2.2所示。

显示安装的组件和路径页面,如果需要修改路径的话可以单击“更改”按钮进行安装路径的修改,组件也可进行修改,这里就是用默认的组件,安装路径修改为C:\Program Files\Java\jdk1.7\,单击“下一步”按钮,如图2.3所示。图2.2 JDK安装界面图2.3 JDK路径修改界面(2)向导提示jre的安装路径,默认即可,如图2.4所示。单击“下一步”按钮提示完成,如图2.5所示。图2.4 jre安装界面图2.5 JDK安装界面(3)安装完JDK后,还要进行环境变量的配置。(4)右击桌面上的“计算机”图标,选择“属性”命令,选择“高级系统设置”选项,在弹出的对话框中选择“高级”标签,并单击“环境变量”按钮,弹出“环境变量”对话框,如图2.6所示。图2.6 环境变量配置界面(5)选择“系统变量”,单击“新建”按钮,依次输入如下“变量名”、“变量值”的内容。

□ JAVA_HOME:C:\Program Files\Java\jdk1.7(JDK安装路径)。

□ PATH:%JAVA_HOME%\bin; %JAVA_HOME%\jre\bin。

□ CLASSPATH:.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar。(6)单击“确定”按钮,配置结束,如图2.7所示。图2.7 JAVA_HOME环境变量设置界面(7)然后通过Win+R调出系统的运行对话框,输入cmd打开系统命令行。(8)在命令行窗口下键入以下命令,查看是否配置正确:

java –version:查看安装的JDK版本信息。

如果可以查看如图2.8所示的java信息,表示安装正常,可以使用。图2.8 Java信息界面2.1.3 安装Eclipse

接下来就是安装Eclipse了。Eclipse是一个开源的开发工具,在Windows平台上安装步骤很简单,只要登录http://www.eclipse.org/downloads/,选择版本进行下载,然后进行解压缩即可,截止到本书的著作时间,最新的Eclipse版本为4.2.2,如图2.9所示。图2.9 Eclipse下载界面

解压缩完毕后,打开Eclipse提示如图2.10所示。图2.10 Eclipse工作目录选择界面

大家可以在此向导界面中设定你的工作空间的目录。然后即可看到Eclipse的欢迎页了,如图2.11所示。图2.11 Eclipse欢迎界面

恭喜大家,Eclipse安装成功了。2.1.4 安装Eclipse的ADT插件

Eclipse安装完成后,还不能开发Android的应用,需要安装ADT(Android Development Tools)插件才可以进行Android应用的开发,安装方式有两种,如下所示。

1. 在线安装

Google提供了ADT插件的在线安装和更新的地址,大家可以通过网络进行插件的安装和更新,具体步骤在:http://developer.android.com/intl/zh-CN/sdk/installing/installing-adt.html。

单击Help菜单,选择下拉菜单的Install New Software选项,如图2.12所示。图2.12 Eclipse添加插件界面

然后弹出Eclipse安装插件的向导框,输入https://dl-ssl.google.com/android/eclipse/,获取ADT插件然后选择下一步安装即可,如图2.13所示。图2.13 在线安装ADT界面

推荐大家使用在线安装的方式进行ADT下载安装,因为今后有了更新的话可以直接升级。

2. 离线安装

Google还提供了ADT插件离线安装包,大家可以通过下载离线安装包,然后进行离线安装,地址在http://developer.android.com/intl/zh-CN/sdk/installing/installing-adt.html中,截止到当前时间为止,ADT的最新版本为ADT-21.1.0。下载完成后,在安装插件的页面选择本地安装即可,如图2.14所示。图2.14 本地安装ADT界面

离线安装的方式,在安装的时候不需要电脑联网,但是后期无法自动进行ADT的更新,只能再次下载新的ADT离线图2.15 ADT 状态栏按钮安装文件进行更新。

两种ADT的安装方式都可以进行ADT的安装,安装完毕后,在Eclipse的状态栏会多出ADT的按钮,但是这两个按钮还不能单击,单击会出错,如图2.15所示。

这两个按钮的介绍分别如下所示。

□ Android SDK Manager:用来管理Android的SDK,包括升级和下载等。

□ Android Virtual Device Manager:用来管理Android的AVD。2.1.5 获取Android SDK

要开发Android的应用就要下载Android的SDK,谷歌官方提供了Android SDK的下载方式,地址:http://developer.android.com/intl/zh-CN/sdk/index.html。下载对应版本的SDK Tools解压缩即可,如图2.16所示。图2.16 Android SDK下载网址2.1.6 在Eclipse中配置Android SDK

打开Eclipse,选择Windows菜单下的Preferences选项,如图2.17所示。图2.17 选择Eclipse的配置界面(1)弹出配置对话框,然后选择Android选项下,配置Android SDK的解压缩目录,在下面就会识别出Android SDK中已经安装的Android SDK的版本了,如图2.18所示。图2.18 配置Android SDK界面(2)当然如果是新下载的Android SDK的话,里面有的SDK的版本应该没有图2.18那么多。想要进行更新的话,单击图2.19 ADT 状态栏按钮Android SDK Manager按钮,会弹出SDK的更新对话框,如图2.19所示。(3)在更新对话框中选择需要更新的SDK的版本,进行更新即可,如图2.20所示。

由于这个更新的时间很漫长,所以大家可以选择需要的SDK版本进行更新。本书中所有的实例都是在Android 图2.20 Android SDK Manager 界面4.2.2版本测试通过的,所以希望大家先更新Android 4.2.2版本即可,也就是API Level 17,剩下的大家可以在有时间的时候再进行更新即可。2.1.7 管理AVD图2.21 ADT 状态栏按钮

当然我们搭建好Android的开发环境后,就可以创建一个AVD(Android Virtual Device)了,也就是Android的虚拟设备,我们叫做Android的虚拟机。因为Android的应用都要在Android的环境下才可以安装调试,所以我们需要创建一个Android的虚拟设备方便我们看到程序的效果及调试。创建AVD的方法如下。(1)单击Android Virtual Device Manager按钮,弹出AVD的管理窗口,如图2.21所示。(2)打开后,单击New来创建一个新的AVD。因为本书中所有的例子都是在Android 4.2.2上测试通过的,这里就创建Android 4.2.2的AVD,如图2.22所示。(3)创建AVD的界面,如图2.23所示。图2.22 Android Virtual Device Manager界面图2.23 创建AVD的界面

其中一些选项需要大家进行填写,具体如下。

□ AVD Name:就是Android模拟器的名字,这个可以随意的取,本人习惯采用Android的版本号作为名字以方便区别各个AVD。本例填写Android4.2.2。

□ Device:代表AVD的屏幕大小,例如:这里选择3.2寸的HVGA的分辨率。

□ Target:代表AVD的系统版本,例如:这里选择Android 4.2.2-API Level 17。

□ Internal Storage:代表AVD的手机内部存储空间,这里默认200M。

□ SD Card:代表AVD的SDCard存储空间,这里为256M。(4)单击OK按钮,就创建好AVD了。(5)在之前的AVD Manager的页面就会有新建的AVD了,如图2.24所示。(6)选择新建的AVD,然后单击Start按钮。启动选择默认即可,如图2.25所示。图2.24 AVD列表页面图2.25 启动AVD的界面(7)然后,就可以启动建立的AVD了,如图2.26所示。图2.26 AVD界面

当看到如图2.26所示后,恭喜你,说明AVD已经建立成功了。2.2 建立第一个Android程序2.2.1 建立一个Android工程(1)单击File菜单中的New选项,选择Android Application Project,创建一个Android工程,如图2.27所示。图2.27 创建Android工程(2)然后弹出建立Android工程的向导对话框,如图2.28所示。图2.28 选择工程的SDK版本

其中有一些选项希望用户填写,具体含义如下所示。

□ Application Name:是应用的名字。

□ Project Name:是工程的名字。

□ Package Name:是工程的基础包名,本书中所有的实例的包名都为com.wyl,example,工程名为案例的编号。

□ Minimun Require SDK:代码程序可运行的最低SDK的版本,这里选择Android 2.2 API8。

□ Target SDK:代码工程可运行的最高SDK版本,一般选择最新的,这里选择Android 4.2.2 API17。

□ Compile With:是工程用来编译的SDK版本,一般也是最新的,这里选择Android 4.2.2 API17。

□ Theme:是创建工程的UI风格,根据用户的需要进行选择即可,这里默认选择None。(3)填写完毕后单击Next按钮。弹出“创建工程”对话框,如图2.29所示。图2.29 创建工程选项页面

其中Create custom launcher icon选项是用来设置程序的图标的,其他选项基本默认即可。然后弹出“创建基本Activity”的对话框,如图2.30所示。图2.30 创建第一个Activity(4)这里设置创建基本的Activity,然后单击Next按钮,如图2.31所示。图2.31 设置第一个Activity的名字及布局名(5)默认单击Finish按钮即可。2.2.2 Android程序的目录结构

建立好工程后,大家会发现Eclipse里面就有了我们创建的工程了,这个工程直接可以运行。想要运行此工程的话,可以右击工程选择Run AS,然后选择Android Application命令,如图2.32所示。图2.32 运行Android工程的界面

可以在AVD中看到程序的运行效果,如图2.33所示是一个“Hello world!”字样的效果。大家可以看到工程的目录如图2.34所示。图2.33 Hello world实例效果图2.34 Android工程目录

在工程中有很多文件夹,其中的功能希望大家有所了解,具体如下所示。

□ src目录:源代码目录,在此目录下是包名,对应包名中包含对应的java源代码。

□ gen目录:是ADT自动生成的资源ID目录。此目录是不需要大家修改的,是ADT自动产生的。

□ assets目录:是工程中用到的外部资源的文件夹所在。这里暂时为空。

□ bin目录:是编译工程成功后的apk所在的目录。

□ libs目录:是外部的jar所在的文件夹。

□ res目录:为工程内部的资源目录,其中包括图片资源、字符串资源和布局资源等。

□ AndroidManifest.xml文件:是工程的配置文件,在其中设置工程apk的权限及组件注册等。

对于我们开发Android的应用来说src目录、res目录和AndroidManifest文件,这些是我们在今后做实例的时候使用最多的,当然其他目录也可能会使用到,等我们讲到对应实例的时候再做具体讲解。2.3 开发必备利器2.3.1 Logcat的使用

Logcat是我们在Android应用开发过程中调试的一个重要的工具,它可以捕捉AVD中的一些Log信息,其中Log的级别分为error、waring、info和debug等,这些我们都可以通过Logcat进行捕捉。打开Eclipse的Logcat的方法,如图2.35所示。

然后选择:Android文件夹中的LogCat窗口,如图2.36所示。图2.35 显示窗口图2.36 显示LogCat窗口

这样在Eclipse中就可以看到LogCat窗口了,如图2.37所示。图2.37 Logcat窗口显示效果

今后我们的Log就会在这个窗口中显示出来了。2.3.2 DDMS(Dalvik Debug Monitor Service)的使用

DDMS是Eclipse中的调试控制器,在今后程序调试的过程中有很多方面要用到DDMS。在Eclipse中打开DDMS的方法如图2.38所示。图2.38 打开DDMS窗口

在DDMS页面中我们可以看到很多调试的窗口如图2.39所示。图2.39 DDMS窗口显示效果

例如:

□ Devices窗口显示连接当前电脑的所有设备。

□ File Explorer窗口显示某个设备的文件列表。

□ Emulator Control窗口模拟对于AVD的电话、短信或者经纬度的模拟。

当然在DDMS中我们今后还会用到很多窗口,今后在使用过程中再给大家讲解。2.3.3 ADB(Android Debug Bridge)的使用

ADB是Android手机连接电脑调试的最基本的进程,在我们的命令行中也可以使用ADB的命令进行调试和对手机的各种操作,在cmd框中输入adb,可以看到所有adb的命令,如图2.40所示。图2.40 ADB命令窗口

其主要的命令参数,请看http://developer.android.com/intl/zh-CN/tools/help/adb.html,在此页面中列举出了ADB命令的所有的参数及用法。大家可以根据自己的情况来使用。2.3.4 The Hierarchy Viewer的使用

Hierarchy Viewer是在Android SDK中提供的视图检查工具,位置在Android SDK的解压后的tools文件夹下,名为hierarchyviewer.bat。它是Android自带的非常有用而且使用简单的工具,可以更好地检视和设计用户界面(UI)。使用方法就是双击hierarchyviewer.bat,选择需要查看的应用包名即可,如图2.41所示。图2.41 Hierarchy Viewer窗口显示效果

在图2.41所示中左边的树形结构就代表了我们当前的Hello world!应用的页面布局效果。这样就可以很直观的看到页面中的布局层次了。2.3.5 Draw9-Patch的使用

Draw 9-Patch是一个九宫格的画图器。它可以对每张图分布成九个块儿,这样的话,就可以实现同一张图片在不同屏幕的手机上都可以用了。具体使用方法是打开tools目录下的draw9patch.bat文件,然后打开对应图片进行编辑即可,如图2.42所示。图2.42 Draw9-Patch窗口显示效果2.3.6 真机测试

对于我们做Android开发的话,大部分时候是使用AVD进行测试和调试。但是对于某些特殊的功能AVD无法进行模拟,例如:手机的摇一摇功能,还有手机的摄像头功能,这些都需要有一个Android的真实设备。

电脑连接Android手机的步骤有如下几个:(1)保证手机驱动在电脑上已经安装完成。一般第三方的手机软件都可以安装。(2)进入Eclipse的DDMS,查看Devices,如果列出了手机,说明手机和Eclipse已经正常连接了,然后大家就可以在真机上进行开发和调试了,如图2.43所示。图2.43 Devices窗口显示效果2.4 Android程序的基本组件2.4.1 Activity组件介绍

Activity是Android中最基本也是最重要的一个组件,它主要负责Android中的页面展示,所有大家看到的Android中的界面,都是Activity。所以这部分内容是和用户直接接触的内容,负责用户的UI和UE,所以你的应用是否能够吸引用户,界面起了绝大部分的作用。2.4.2 ContentProvider组件介绍

Android中每个应用程序都有自己的内存空间,而且应用程序之间的内存空间是无法相互访问的,这就带来了一个问题,如果几个应用程序之间希望共享同一份数据的话,将很难实现。例如,我们手机上有可能有多个短信客户端,但是它们访问的短信数据确是同一份库。Android中通过ContentProvider来实现应用程序间的数据共享。所以应用程序间的数据只有通过ContentProvider来进行共享。2.4.3 Service组件介绍

Service运行在Android的后台,它不和用户直接交互,但是它却能够为用户提供一些服务。例如:后台的音乐播放、后台的任务下载等。当然Android系统中大部分与硬件相关的一些功能也都是通过服务来实现的,如电话服务、短信服务和GPS服务等。所以如果当你希望开发的功能是在后台运行的,那么你就应该考虑使用Service实现了。2.4.4 BroadcastReceiver组件介绍

Broadcast是Android中各个应用程序之间传输消息的最基本机制,也是唯一的机制。而我们在应用中就可以通过BroadcastReceiver来截获系统所发出的广播消息,从而获取系统所要传达的消息。例如,接收短信广播,可以实现短信的拦截功能,接收电话广播可以实现电话的黑名单功能等。所以如果你想要实现的功能是通过系统的广播,来实现一些功能,那你就要考虑使用BroadcastReceiver了。2.4.5 Intent组件介绍

之前我们介绍的几个组件,是Android中的基本组件,但是这些组件之间想要进行交互,就一定要使用Intent了。例如,通过Activity去启动另一个Activity,通过Activity去发送广播等。这些都要用到Intent组件。而且很多与系统的功能交互也要使用Intent,所以如果你希望通过一个组件去启动另一个组件的话,就要使用Intent了。2.5 小结

在本章节中主要介绍了Android的开发环境的搭建还有Android开发过程中常见的开发调试工具,通过这些工具,我们就可以开发Android应用了。当然本章还介绍了Android中最基本组件的功能,希望通过本章的学习大家都能够配置好Android的开发环境。下一章我们会讲述如何开发Android中的界面应用。第3章 让你的程序变成美女

对于Android应用开发最基本的就是用户界面(GUI,Graphics User Interface)的开发。如果一个应用没有好的界面,那么将很难吸引最终用户。所以用户界面的开发对于Android应用开发是很重要的,也是我们首先要掌握的。

Android系统中提供了大量的UI组件,这些组件小到简单的文本框TextView,大到浏览器核心控件WebView,都可以给用户提供不同的功能感受。我们开发者只要根据用户的需求将这些UI组件组合在一起,就像拼装一辆汽车。尽量在有限的手机屏幕中给用户带来无限的美感体验,那么何愁你的应用没有人用呢?

本章主要通过各种应用界面的实例介绍,来带领大家一起学习Android的界面开发。希望大家阅读完本章内容后,可以根据自己的需求独立完成各种界面的开发。3.1 Android中基本控件的使用范例001 更改文字标签的内容

1. 实例简介

在上一章中我们搭建完成Android的开发环境,新建立了一个Android工程,在AVD中运行可以看到在一个界面中显示Hello world的文字标签。这是我们的第一个Android程序,但是这个程序过于死板,如何让文字标签显示我们想让它显示的文字内容呢?这个实例会带领我们通过两种方式修改文字标签的文字内容,方式1:通过控件的xml布局中的text属性修改TextView的文字,方式2:通过在Java代码中得到TextView对象,然后通过对象的setText方法来设置TextView的文字。

2. 运行效果

该实例运行效果如图3.1所示。

3. 实例程序讲解

方式1:通过修改xml布局文件中TextView控件的text属性来完成如上效果,主要修改的地方在我们建立的工程图3.1 在界面中显示I am a 下的res/layout/activity_main.xml。代码如Android Developer下。

这是我们的Activity的布局文件,其中第11~14行构造了一个TextView控件,在TextView控件中text属性就代表这个文本标签上显示的文字,所以只要修改text节点的值为你想输入的字符串即可,如第14行的修改。

方式2:在Java代码中得到TextView对象,然后通过对象的setText方法来设置TextView的文字。要通过这种方式修改TextView的内容,步骤如下。(1)在xml布局文件的TextView控件中加上id字段。

如上面中代码的第12行,通过id节点给TextView对象加上唯一标示的id。这里需要注意的是id的值是自定义id,所以加入的方式为@+id/Tv。其中的Tv是我们的TextView的id。(2)在代码中获得此TextView对象,通过setText方法修改此TextView的值。

主要修改的地方在我们建立的工程下的src/com.wyl.example/MainActivity.java,代码如下。

如上代码第10行定义了一个TextView对象,在第16行我们通过findViewById拿到了刚才定义了那个TextView的对象,在第17行通过TextView中的setText方法来修改TextView的值。

通过上面两种方法我们都可以达到修改文本标签内容的目的,相对来说第一种方法,是在程序加载的时候就确定了TextView的内容。第二种方法是在程序运行的时候确定了TextView的内容,所以如果你的文本标签的内容要根据程序运行过程中某些状态来变化的话,要选择第二种方法。例如,用户名标签,一般使用第一种方式,因为它一旦确定基本不再修改;如果是显示网络数据的文本标签,那么就要采用第二种方法了,这样才能根据程序的运行状态修改标签的内容。

4. 实例扩展

扩展1:在xml布局文件中android:text的内容可以是字符串,也可以是系统的资源Id。

如上面代码的第5行,其中@string/str就代表工程的str字符串资源,工程的字符串资源一般保存在res/values/strings.xml中。

在strings.xml文件中的第7行,你可以看到str资源的值是hi Android,这就是你设置给TextView的真实内容了。

扩展2:在Java代码中修改TextView的值的话,setText方法有多种重载形式:范例002 更改手机页面的背景色

1. 实例简介

到目前为止,我们现在看到的页面的颜色都是系统默认的颜色值,如果我们想要在程序的执行过程中显示与众不同的页面,更改页面的背景颜色是最基本的思路。本实例就带领大家一起来学习如何更改页面的背景颜色。图3.2 更改界面的背景为黑

2. 运行效果色,字体颜色为白色

该实例运行效果如图3.2所示。

3. 实例程序讲解

想要实现更改页面的背景,只需修改res/layout/activity_main.xml即可。代码如下:

这是我们的Activity的布局文件,其中第一个节点RelativeLayout代表当前页面布局效果为相对布局。第9行添加了android:background节点,并且其值设置成了@android:color/background_dark,其代表Android系统中的颜色资源background_dark。当然这里的值也可以是一个颜色值,如下:android:background=" #FF0000"

其中,#FF0000代表红色的颜色值,这样页面背景就被更改为红色。

最优的一种方式是在工程中自定义颜色资源文件,将各种颜色值加入。

在res/ralues/目录中建立colors.xml资源文件,内容为:

这样在布局文件中就可以通过如下代码来设置自定义的颜色资源了。android:background="@color/green"

4. 实例扩展

扩展1:在Android中设置任何一种控件的背景方式都一样,可以在对应的xml布局文件中设置也可以在Java代码中设置。在Java代码中设置控件背景的步骤如下:(1)得到需要修改背景颜色的控件,通过findViewById方法。(2)通过setBackgroundColor方法设置控件的背景颜色。

扩展2:对于Android中控件的背景的修改,不仅仅可以设置成单一颜色值,而且还可以将一张图片设置成控件的背景。实现方法与设置背景颜色相同。就是在对应的xml布局文件中给相应的控件加上如下代码:android:background="@drawable/ic_launcher"

其中@drawable/ic_launcher代表工程目录中res/drawable/的ic_launcher.png图片。这样你的页面就以此图片为背景了。范例003 文字超链接

1. 实例简介

在Android系统中默认情况下TextView仅仅用来显示文字内容,可我们经常会看到一些应用中的TextView不但可以显示文字,而且当它显示特殊意义的文字时具有特殊的功能。例如,当TextView中显示网址的时候可以单击跳转到网址;当TextView中显示电话的时候可以单击打电话。其实这些功能实现起来也很简单,本实例就带领大家一起来学习如何制作具有超链接效果的文字标签。

2. 运行效果

该实例运行效果如图3.3所示。图3.3 显示超链接的文字内容

3. 实例程序讲解

想要实现具有网址超链接功能的文字标签,只需修改res/layout/activity_main.xml即可。代码如下:

这是我们的Activity的布局文件,其中在TextView标签中添加autoLink字段,并且设置值为web,则可以实现文字超链接的功能。

4. 实例扩展

对于TextView的autoLink属性,其可选择的属性值如下所示。

□ none:不匹配任何类型的文字,默认为此选项。

□ web:匹配URL地址,单击后打开浏览器显示地址。

□ email:匹配邮箱地址,单击后打开邮箱发送邮件。

□ phone:匹配电话号码,单击后打开拨号界面。

□ map:匹配地图地址,单击后打开地图选项。

□ all:匹配所有的格式,自动检测web、phone、email和map四种格式。

例如:

其中,单击autoLink为email的文字标签,程序会打开手机上的邮件客户端(确保你的手机安装了邮件客户端)。单击autoLink为phone的文字标签,程序会打开手机上的电话拨号界面。单击autoLink为map的文字标签,程序会打开手机上的谷歌地图客户端(确保你的手机安装了谷歌地图客户端),而且对于现在来说支持美国的地图。范例004 让你的文字标签更加丰富多彩

1. 实例简介

在Android系统中的TextView不但可以实现文字展示和几种特殊形式的超链接,其实在TextView中还可以实现更加绚丽的效果。例如,可以在TextView中显示Html样式。这些效果对于大家在做实际项目的时候是非常实用的,本实例就带领大家一起来学习如何制作具有Html样式的文字标签。

2. 运行效果

该实例运行效果如图3.4所示。

3. 实例程序讲解

想要实现在文字标签中显示Html样式,一定要在Java代码中对TextView进行设置,所以步骤就是先设置TextView的id,图3.4 显示网页格式的文字内在Java中通过findViewById方法得到对应容的TextView对象,然后再通过settext方法进行设置。首先修改res/layout/activity_main.xml即可。代码如下:

这是我们的Activity的布局文件,其中在第13行给TextView标签添加id字段,并且设置控件id为Tv,这样就可以在Activity中通过id得到此TextView了。

在src/com.wyl.example/MainActivity.java中得到TextView的对象,然后通过setText方法设置文字内容。代码如下:

在代码的第17行通过findViewById得到TextView的对象,第19~23行定义了一段Html语法的字符串文字。在第24行将str字符串通过Html类的fromHtml方法转成对应字符串,然后设置给Tv。

4. 实例扩展

当然TextView不但可以简单的识别Html中的颜色标签,还可以识别标签和标签等。下面我们看一段代码。

在代码的第20行我们定义了一个带有标签的字符串str,通过Tv的setText方法将str的内容按照Html的形式展示出来,但是此时使用的方法变成:Spanned android.text.Html.fromHtml(String source, ImageGetter imageGetter, TagHandler tagHandler)

这个方法的第一个参数是我们如上的str,第二个参数是ImageGetter的类的对象,也就是我们24~31行定义的imgGetter对象,在ImageGetter类中有接口方法getDrawable,此方法在str中检测到标签后调用,并且把识别到的图片值传给getDrawable的参数source,然后你就根据得到的图片值来进行图片的显示,此实例中图片值显示了一个本地的资源id为R.drawable.ic_launcher,所以在getDrawable中通过getResources().getDrawable方法来获得对应的Drawable对象,然后返回出去。

TextView控件对于Html语言的支持,官方文档原话为Not all HTML tags are supported.,并不是所有的Html标签都支持,经过测试还支持的标签有: 超链接;文字粗体;

标题文字,同理h的其他级别;文字强调等。当然随着API的升级更新可能有些支持的标签不再支持,或者添加了新的标签,那么当大家用到某种标签的时候自己进行测试即可。范例005 用户名密码输入框

1. 实例简介

在Android系统中的TextView主要负责内容的显示,对于内容的输入我们最常用的控件是EditText。EditText可以用来接收用户录入的信息,当然为了能给用户提示输入的内容,可以在输入前加入相应的提示。本实例就带领大家一起来做一个常见的用户密码输入界面。

2. 运行效果

该实例运行效果如图3.5所示。

3. 实例程序讲解

想要实现在页面中显示用户名和密码的输入框,只需对我们程序的res/layout/activity_main.xml进行修改即可。代码如下:图3.5 用户名密码输入框

这是我们的Activity的布局文件,其中第11行在当前布局中添加了一个EditText控件代表用户名的输入框,为了能够在用户输入之前对用户提示输入信息,加上了android:hint属性代表提示信息。在第17~21行添加了代表密码输入的EditText,并且相对于上面的用户输入框加入了android:password属性代表当前为一个密码框,即用户输入过程中输入的字符是不可见的。

4. 实例扩展

当然对于用户的密码可能还会有一些限制,例如:密码长度最长10个字符,而且只能是数字。这样的话就要对密码的EditView再进行一些设置了,代码如下:

在上面的第5行加入了maxLength属性,代表此输入框最多能够接收的字符的个数。在第6行加入了numeric属性代表此输入框只能输入数字。

对于EditText的其他限制条件也可以同样的方法进行设定,例如:maxLines代表最多输入的行数,digits属性代表能够接收的字符的范围等。这些属性大家在使用的时候去查看官方文档即可。范例006 电话号码输入框

1. 实例简介

在Android系统中EditText可以接收用户的输入,也可以进行简单的校验,但是我们通常使用的EditText接收的输入有一定的约束的。例如,邮件的输入框和电话号码的输入框等。本实例就带领大家一起来做自己要求的约束格式的输入框。

2. 运行效果

该实例运行效果如图3.6所示。

3. 实例程序讲解

图3.6想要实现的效果是当在电话的输入框中输入正确的电话号码时输入框的文字是绿色,如果输入不是电话号码的格式,输入框的颜色为红色。要想实图3.6 电话号码输入框现这样的效果有以下三个步骤。(1)修改res/layout/activity_main.xml文件添加EditText控件并设置id。代码如下:

这是我们的Activity的布局文件,其中,第11~15行在当前布局中添加了一个EditText控件代表电话号码的输入框,为了能够在用户输入之前对用户提示输入信息,加上了android:hint属性代表提示信息,为了在java代码中能够得到此EditText,设置的id属性。(2)修改src/com.wyl.example/MainActivity.java文件,得到EditText控件,然后设置内容的监视者查看EditText内容的变化,最后设置相应的字体颜色。主要代码如下:

在此代码中第12~14行通过findViewById得到EditText对象,并设置了文字改变监听器TextWatcher的对象,这样的话,等EditText的文字发生改变的时候,程序会自动调用第29~44行的文字监听器TextWatcher的afterTextChanged方法,然后修改EditText的文字颜色。在其中修改颜色之前会进行电话号码条件的检查,我们这里使用正则表达式来实现,在代码中的第48~63行。

4. 实例扩展

基于如上思路我们可以制作邮箱的验证对话框和邮编的验证对话框等,只要大家实现不同的正则表达式即可。大家可以自己进行练习。范例007 更改输入框的文字字体

1. 实例简介

在Android系统中EditText具有默认的字体格式,但是这些字体格式相对比较单调。如果你想要使EditText的字体与众不同的话,就要改变字体格式了。本实例就带领大家一起来做一个不同字体的输入框。

2. 运行效果

该实例运行效果如图3.7所示。

3. 实例程序讲解

图3.7想要实现不同字体的EditText输入框。要想实现这样的效果只要修改当前页面的布局文件res/layout/activity_main.xml中EditText控件属性即可。代码如下:图3.7 不同字体的输入框

在这个布局中的第14、20、26、32行都对EditText控件设置了不同的字体属性。这样在看到输入框的时候,它就具有不同的字体效果了。

4. 实例扩展

对于Android系统中只提供了三种字体,而且这三种字体效果也不是特别好看,如果你想要实现一些比较个性的字体的话,就可以引入外部的字体格式了。常见的字体格式的后缀为.ttf。但是引入外部字体的话就一定要在java文件中设置字体格式了。步骤如下:(1)通过findViewById得到对应的EditText控件。EditText Et = (EditText)findViewById(R.id.Et);(2)通过Typeface的createFromAsset方法获得typeface对象,前提是在你的工程中的asset/fonts目录下有对应的字体文件。我这里为了方便直接是用Windows中的华文行楷的字体。Typeface typeFace =Typeface.createFromAsset(getAssets(),"fonts/ STXINGKA.TTF ");Et.setTypeface(typeFace);

通过如上步骤大家就可以定义属于自己的格式的EditText对话框了。范例008 我同意上述条款的页面

1. 实例简介

在我们使用Android的一些应用的时候经常会看到一个页面,尤其是在注册用户信息的时候,会有一个我同意上述条款的页面。本实例就带领大家一起来做一个条款的显示页面。

2. 运行效果

该实例运行效果如图3.8所示。

3. 实例程序讲解

想要实现图3.8效果需要使用CheckBox控件。此控件主要有两种状态,选中和未选中。一般在我们程序中想要对某个功能的选项进行是否选择的时候图3.8 我同意条款页面使用。要想实现这样的效果只要修改当前页面的布局文件res/layout/activity_main.xml,在其中添加CheckBox控件即可。代码如下:

在上面代码的第17~21行定义了CheckBox控件,这样你在页面中就可以看到复选框的效果了。

4. 实例扩展

如果Android系统中的CheckBox的样式不能满足你的要求。你可以实现一个个性的CheckBox。这样的话就需要定义样式。首先准备好两张png的图片,用于CheckBox的选中和未选中的图片,然后在res/drawable中定义checkboxstyle.xml文件。其内容为:

然后在CheckBox控件中加上button属性即可。

其中button属性代表CheckBox的选项背景,使用@drawable/checkboxstyle,也就是之前建立的checkboxstyle.xml文件,这样你的CheckBox在选择的过程中就会显示关联的图片了。范例009 爱好调查页面

1. 实例简介

对于CheckBox控件,在一个页面中不但可以代表一个是否的逻辑,而且也经常用在多选的情况。例如,对于学生的爱好调查,有些学生可能喜欢篮球,而且喜欢足球。本实例就带领大家一起来做一个爱好调查页面。

2. 运行效果

该实例运行效果如图3.9所示。

3. 实例程序讲解

在图3.9效果中选中三个复选框中的任意一个,在下方的TextView中都会进行选择结果的显示。要想实现这样的效果,步骤如下所示。图3.9 爱好调查页面(1)修改当前页面的布局文件res/layout/activity_main.xml,在其中添加三个CheckBox控件,分别代表篮球、乒乓球和足球的复选框。代码如下:

在上面代码的第11~16行、第18~23行和第25~30行分别定义了三个CheckBox控件。在第32~37行定义了一个结果文本标签。而且给这四个控件分别设置的id属性,方便我们在java文件中获取相应的控件对象。(2)在src/com.wyl.example/MainActivity.java代码中进行CheckBox的取值操作。代码如下:

在如上的代码中第49~53行分别得到了三个CheckBox控件及一个TextView对象。在第31~34行给三个CheckBox对象设置了一个监听器。在36~44行定义了OnCheckedChangeListener,所以当CheckBox的选中状态发生改变的时候会调用onCheckedChanged,去执行57~73行的代码设置TvResult对象的显示内容。这样就可以实现当任意一个CheckBox控件的状态改变的时候TextView的内容随之改变了。

4. 实例扩展

对于CheckBox控件来说,如果一个页面中有多个CheckBox,那么他们之间是没有逻辑联系的,如果希望一个页面中的一些CheckBox有联系的话,必须使用代码人为进行关联了。例如,在一个页面中有六个CheckBox,其中三个是学生的爱好,足球、篮球和乒乓球,还有三个是大家精通的语言,C语言、C++和Java。那么在进行选择的时候就需要人工的对于这六个CheckBox进行区分了。范例010 政治面貌调查表

1. 实例简介

对于CheckBox控件适用于多选的情况,而在某些情况下需要在某些选项中选择其中之一,这个时候就需要使用RadioButton了。例如,对于政治面貌的选择:党员、团员和群众。本实例就带领大家一起来做一个政治面貌选择页面。

2. 运行效果

该实例运行效果如图3.10所示。

3. 实例程序讲解

在图3.10效果中选中三个选项中当选中一项时,其他两项自动取消选择。要想实现这样的效果,只需修改当前页面的布局文件res/layout/activity_main.xml,在其中添加一个RadioGroup控件,来代图3.10 政治面貌调查页面表一个单选框组,然后在RadioGroup中添加三个RadioButton选项。代码如下:

在上面代码的第11~31行定义了一个RadioGroup控件,代表一个单选框组,在一个组中的单选项是具有关联的,也就是说在一个选项组中的选项只可以选择一个,其他的默认不选择。在RadioGroup中添加三个RadioButton,分别代表党员、群众和团员,但是这三项只可以选择其中一项。

4. 实例扩展

对于RadioGroup来说,大家可以把他当做是一个单选框组,它就给我们的单选框进行逻辑的划分,而且不但RadioGroup可以进行逻辑的划分,它可以简单的布局其中的RadioButton。我们上例中的效果是纵向列表选择,可以通过RadioGroup控件的android:orientation属性修改为横向显示。代码如下所示:范例011 IT人员测试应用

1. 实例简介

对于RadioGroup和RadioButton,其实在我们生活中应用很广泛。例如,现在比较流行的测试软件,通过对给出问题进行回答,应用中会计算用户得到的积分,并且根据积分得到用户的性格。本实例就带领大家一起来做一个简易的IT人员测试应用。

2. 运行效果

该实例运行效果如图3.11所示。

3. 实例程序讲解

在图3.11效果中有三道题目,并且每道题目有三个选项,每个题目只可以进行一个选项的选择,而且三个题目之间的选项互不影响。要想实现这样的效果,步骤如下所示。(1)由于我们本例中用到的固定字符串相对比较多,所以在res/values/图3.11 IT 人员测试应用strings.xml中建立相应字符串节点,方便我们在xml布局文件中使用。代码如下:(2)定义界面的布局,修改res/layout/activity_main.xml布局文件。代码如下:

其中第17~40行定义了题目一的题目和选项,并且设置了相应的id,方便在java文件中进行对象的获取。(3)在java文件中获取相应的控件对象,然后设置监听器,当用户选择完毕后计算出用户的得分。代码如下:

在上面代码的第29~33行获得RadioGroup控件。在第22~24行为RadioGroup控件设置监听器。在第36~99行自定义了RadioGroup的OnCheckedChangeListener,其中的onCheckedChanged方法是当RadioGroup状态改变后的回调方法,本例中在此方法中得到了三个RadioGroup的选项,并且根据一定的公式计算出了用户对于电脑了解程度的积分,并在TextView控件中给出提示。

4. 实例扩展

RadioGroup中RadioButton控件只能选一个,而且通过RadioGroup控件的getCheckedRadioButtonId()可以得到选择的RadioButton的id,如果没有选择的话,此函数返回-1,大家可以通过此返回值判断此RadioGroup中的选项是否被用户选择。范例012 应用中的关闭声音的按钮

1. 实例简介

在我们使用Android应用或者玩儿游戏的时候经常会用到一个功能,就是关闭程序的声音,负责开关声音的按钮,不同于我们之前讲到的控件,一般情况是一个可以按下的按钮,有按下的状态,有弹起的状态。本实例就带领大家一起来做一个声音开关按钮的效果。

2. 运行效果

该实例运行效果如图3.12所示。

3. 实例程序讲解

在图3.12效果中有一个开关按钮,此开关按钮有两个状态,当按下的时候显示声音关闭,当弹起的时候显示声音开图3.12 声音开启关闭效果启。要想实现这样的效果,只需要在res/values/strings.xml中建立一个ToggleButton节点即可。代码如下:

在如上代码的第4~9行建立了一个ToggleButton节点,加上了textOn属性,就代表当开关开启时显示的文字,加上了textOff属性,就代表当开关关闭时显示的文字,这样即可以实现一个开关按钮了。

4. 实例扩展

在Android 4.0版本之后,Android SDK中加入了一个新的表示开关的控件Switch,此控件不但能够表示开关的功能,而且可以实现滑动开关。要实现Switch控件,只需要在布局文件中加入如下代码:

需要注意的是如果要使用Switch控件的话,我们建立的Android工程一定要保证在Android 4.0版本以上,所以在工程的AndroidManifest.xml文件中一定要保证minSdkVersion和targetSdkVersion大于等于14,这样才可以保证程序会在Android 4.0版本以上的手机运行。范例013 应用中的音量调节效果

1. 实例简介

在我们使用Android应用或者玩儿游戏的时候,可能不仅仅是开启关闭声音,有时候会希望应用能有声音但是降低一些声音的音量,这时候我们就会用到Android中的另一个控件SeekBar。本实例就带领大家一起来做滑动调节音量的效果。

2. 运行效果

该实例运行效果如图3.13所示。图3.13 音量调节效果

3. 实例程序讲解

在图3.13效果中有一个TextView控件来显示文字标签,还有一个SeekBar控件来实现滑动的进度效果。要想实现这样的效果,只需要在res/values/strings.xml中建立一个SeekBar节点即可。代码如下:

在如上代码的第4~9行建立了一个SeekBar节点,加上了max属性,代表当滑动到最大值的时候代表的数字,加上了progress属性,在滑动过程中每次最小的滑动距离,这样即可以实现一个滑动的效果了。等我们今后学习了如何设置系统的音量,那就可以真正的实现通过滑动来控制声音了。

4. 实例扩展

对于SeekBar控件,Android中提供了丰富的属性控制,在我们做应用的时候大家可以直接来使用,我这里列出Seekbar控件的常用属性如下。

□ progressDrawable:设置拖动条的样式。

□ thumb:设置SeekBar中滑块的图片。

□ secondaryProgress:代表第二进度的大小。

除了上述的属性以外,SeekBar还有很多可以设置的属性,大家使用的时候查一下官方文档即可。范例014 服务星级评价效果

1. 实例简介

在我们去Android的市场上搜索应用的时候,最关注的一项指标就是这个应用其他用户的评分如何,当然如果你使用了一款应用你感觉这款应用很好,你也会给出一个比较好的评价,在Android中给出了方便用户评价的控件就是RatingBar。本实例就带领大家一起使用RatingBar来实现一个评分的效果。

2. 运行效果

该实例运行效果如图3.14所示。

3. 实例程序讲解

在图3.14中用一个RatingBar控件来实现滑动进行星级评价的效果。要想实现这样的效果,只需要在res/values/图3.14 服务星级评价效果strings.xml中建立一个RatingBar节点即可。代码如下:

在如上代码的第4~9行建立了一个RatingBar节点,加上了numStars属性,就代表当前评价控件最多的星级数量;加上了setpSize属性,就表示在滑动过程中每次最小的滑动星级该变量,这样就可以实现滑动进行等级评价的效果了。

4. 实例扩展

对于RatingBar控件其实和SeekBar控件的效果比较相似,但是RatingBar更侧重于表示星级评价的时候使用,同样Android对于RatingBar也提供了丰富的属性控制,我这里列出RatingBar控件的常用属性如下。

□ style:设置RatingBar的样式。

□ rating:设置RatingBar的默认评分。

□ isIndicator:设置RatingBar是否是一个指示器,如果是的话,用户就无法进行滑动修改了。

除了上述的属性以外,RatingBar还有很多可以设置的属性,大家使用的时候查一下官方文档即可。范例015 页面加载中效果

1. 实例简介

在开发Android应用的时候,经常会遇到一些比较耗时的操作,例如:网络文件下载、在线视频加载和程序中图片音频资源的加载等。在这样的过程中如果你不做处理的话,用户会以为你的程序反应比较慢,或者是不是程序死掉了,所以我们在做比较耗时的操作的时候一般通过一个ProgressBar来给出用户提示,或者显示加载进度。本实例就带领大家一起使用ProgressBar来实现页面加载中的效果。

2. 运行效果

该实例运行效果如图3.15所示。

3. 实例程序讲解

在图3.15中用一个ProgressBar控件来实现正在加载页面内容的效果。要想实现这样的效果,只需要在res/values/图3.15 页面加载中效果strings.xml中建立一个ProgressBar节点即可。代码如下:

在如上代码中建立了一个ProgressBar节点,这样就可以实现正在加载的效果了。但是我们通常使用的ProgressBar不仅仅只有这一种样式,我们可以通过style属性给ProgressBar设置相应的样式效果,代码如下:

其中style属性就设置了ProgressBar控件的显示样式,Android系统中提供了集中系统默认的样式,大家可以进行选择。

□ Widget.ProgressBar.Horizontal:水平ProgressBar的进度条效果。

□ Widget.ProgressBar.Small:小圆形的进度条效果。

□ Widget.ProgressBar.Large:大圆形的进度条效果。

□ Widget.ProgressBar.Inverse:普通进度条翻转。

□ Widget.ProgressBar.Small.Inverse:小进度条翻转。

□ Widget.ProgressBar.Large.Inverse:大进度条翻转。

当然还可以通过max属性设置横向进度条的最大进度,通过progress属性设置当前进度,通过visibility属性来设置这个ProgressBar的可见性。

4. 实例扩展

对于应用加载进度的提示,还有一个控件是我们经常使用的,就是ProgressDialog。ProgressDialog不同于ProgressBard的一点是,在加载过程中,ProgressBar是通过按键无法取消的,而ProgressDialog运行过程中按手机物理返回键,ProgressDialog就消失了。而且ProgressDialog不是一个控件类,而是作为android.app包中的一个应用类来使用,如果想要使用ProgressDialog的话,在程序的java代码中定义一个ProgressDialog对象,然后调用其show方法即可,代码如下:

当然,对于ProgressBar和ProgressDialog更加深入的用法,我们会在讲到异步请求和加载的时候再次讲到。范例016 日期获取框效果

1. 实例简介

在开发Android应用的时候,经常会遇到输入日期的情况,例如:请填入您的生日,请填入您工作的日期等。如果我们使用之前例子中的EditText来接受日期的话,我们需要写复杂的正则表达式来控制用户输入的格式,而且也无法快速的进行日期的调整,所以Android中提供了获取日期的控件DatePicker。本实例就带领大家一起使用DatePicker来实现获取日期的效果。

2. 运行效果

该实例运行效果如图3.16所示。

3. 实例程序讲解

在图3.16效果中用一个DatePicker控件来实现,当单击DatePicker时就可以修改日期,并且TextView中显示对应的日期值。要想实现这样的效果,只需要在res/values/strings.xml中建立一个DatePicker节点。代码如下:图3.16 获取日期效果

在如上代码中7~10行建立了一个DatePicker节点,这样就可以显示日期获取的效果了。在DatePicker和TextView中分别设置了id属性,方便在java文件中获取相应的对象进行操作。

然后在src/com.wyl.example/MainActivity.java中获取DatePicker对象并且进行监听器的设置,这样当DatePicker 的值发生改变时TextView的值也就随时改变了。代码如下:

在代码的第37~38行获取了DatePicker和TextView的控件对象,在第19~31行初始化DatePicker对象并且绑定了OnDateChangedListener类的一个无名对象,其中实现了onDateChanged方法,当DatePicker对象发生改变时自动回调此方法。在onDateChanged方法中通过Dp的getYear、getMonth和getDayOfMonth分别获取到DatePicker的年月日,然后显示在TextView控件中。

4. 实例扩展

对于DatePicker来说,我们还有很多可以设置的属性,在这里我列出常见的DatePicker的属性。

□ calendarViewShown:是否显示日历栏。

□ android:endYear:用于设置最终的年份。

□ android:maxDate:用于设置最大的日期。

□ android:minDate:用于设置最小的日期。

□ android:spinnersShown:用于设置spinner是否显示。

□ android:startYear:用于设置开始年份。范例017 时间获取框效果

1. 实例简介

在开发Android应用的时候,有时候也会遇到输入时间的情况,例如:设定时间闹钟和填写工作日志等。如果我们使用之前例子中的EditText来接受时间的话,我们也需要写复杂的正则表达式来控制用户输入的格式,而且也无法快速的进行时间的调整,所以Android中提供了获取日期的控件TimePicker。本实例就带领大家一起使用TimePicker来实现获取时间的效果。

2. 运行效果

该实例运行效果如图3.17所示。

3. 实例程序讲解

在图3.17效果中用一个TimePicker控件来实现,当单击TimePicker时就可以修改时间,并且TextView中显示对应的时间值。要想实现这样的效果,只需要在res/values/strings.图3.17 获取时间效果

xml中建立一个TimePicker节点。代码如下:

在如上代码中7~10行建立了一个TimePicker控件,这样就可以显示获取时间的效果了。在TimePicker和TextView中分别设置了id属性,方便在java文件中获取相应的对象进行操作。

然后在src/com.wyl.example/MainActivity.java中获取TimePicker对象并且进行监听器的设置,这样当TimePicker的值发生改变时TextView的值也就随时改变了。代码如下:

在代码的第32~35行获取了TimePicker和TextView的控件对象,在第19~31行初始化TimePicker对象并且绑定了OnTimeChangedListener类的一个无名对象,其中实现了onTimeChanged方法,当TimePicker对象发生改变时自动回调此方法。在onTimeChanged方法中的hourOfDay和minute分别代表修改后的小时和分钟,然后显示在TextView控 件中。

4. 实例扩展

对于TimePicker来说就是Android中提供的专门用来处理时间的控件,所以基本关于时间的设置在TimePicker中都可以得到设置,例如:时间是否是24小时制,是否显示AM/PM等。范例018 日期时间弹出框效果

1. 实例简介

在开发Android应用的时候,一般会在输入日期的时候也输入时间,例如:请输入您的具体出生时间,请输入您的购车时间,请打印我这个月的话费清单等。这时候我们不但要得到日期,而且要得到时间。使用之前讲到的DatePicker和TimePicker的话我们页面的空间就会被挤压的很小了,所以Android中提供了更方便的获取时间和日期的方法,就是使用DatePickerDialog和TimePickerDialog。它使用弹出对话框的方式让用户进行日期和时间的选择,这样就避免了日期控件和时间控件比较占用页面空间的问题。本实例就带领大家一起使用DatePickerDialog和TimePickerDialog来设置日期时间的效果。

2. 运行效果

该实例运行效果如图3.18所示。

3. 实例程序讲解

在图3.18效果中用一个TextView控件来显示设置的日期和时间的具体内容,定义两个按钮,当单击这两个按钮的时候,分别显示获取日期和时间的对话框来得到日期和时间,并且当日期获取对图3.18 获取日期时间效果话框和时间获取对话框得到数据后,修改TextView的内容。要想实现这样的效果,步骤如下所示。(1)需要在res/values/strings.xml中建立一个TextView控件和两个Button控件,并且设置id,方便在java文件中获取这些控件。代码如下:

在如上代码建立了一个TextView控件和两个Button控件,在第2行、第8行和第13行分别设置了对应的id,方便在java文件中获取相应的对象进行操作。(2)修改src/com.wyl.example/MainActivity.java文件中的代码。代码如下:

在代码第97~99行获取对应控件的对象,在第25~26行设置了第29~46行定义的按钮的监听器,当单击按钮时调用单击监听器的onclick方法,然后调用showDialog方法,然后回调onCreateDialog方法,执行Dialog的初始化,在第59~71行定义了日期选择对话框,在第75~86行定义了时间选择对话框。并分别设定了日期改变和时间改变的监听器。这样就实现了当获得时间或者日期的时候TextView的内容跟随变化了。

4. 实例扩展

对于DatePickerDialog和TimePickerDialog都是android.app包下的类,所以在Android中会把它们当做一个app来进行处理,所以使用这两个控件的时候和之前的控件不太相同,其实它们更像是弹出的另一个页面,而其当这些Dialog弹出后按下手机上的物理返回键,这些对话框也会消失。范例019 钟表显示效果

1. 实例简介

在开发Android应用的时候,可能会遇到在应用中显示时间的情况。例如,在用户全屏播放视频时显示时间和在用户全屏游戏时显示时间等。这时候我们需要在页面中展示当前的时间,Android中提供AnalogClock和DigitalClock两个控件可以显示系统时间了。本实例就带领大家一起使用AnalogClock和DigitalClock来显示系统时间。

2. 运行效果

该实例运行效果如图3.19所示。

3. 实例程序讲解

在图3.19中用两种形式显示了当前的系统时间,用到两个系统控件AnalogClock和DigitalClock,想要实现图3.19效果,需要在res/values/strings.xml中添加AnalogClock和DigitalClock控件即图3.19 显示系统时间效果可。代码如下:

在如上代码中AnalogClock代表模拟时钟控件,DigitalClock代表数字时钟控件,默认都显示系统时间。

4. 实例扩展

对于系统时间的显示可以使用AnalogClock和DigitalClock控件来显示,当然你也可以定义自己的显示形式,前提是你可以得到系统的时间,在Android中得到系统时间的方法是:

然后系统时间就存储在字符串str中了,大家可以通过自定义显示时间的View来显示时间了。范例020 秒表应用

1. 实例简介

在Android中,一些应用需要计时功能,例如,游戏的过程中是否在规定时间内完成了谜题等。Android中提供了Chronometer计时器控件,使我们可以很方便的实现计时功能。本实例就带领大家一起使用Chronometer来完成秒表应用。

2. 运行效果

该实例运行效果如图3.20所示。

3. 实例程序讲解

在图3.20中包含了一个Chronometer控件用来显示秒表,三个按钮用来控制Chronometer的开始、停止和重置。想要实现上述效果,步骤如下所示。(1)修改res/layout/activity_main.xml图3.20 秒表应用文件,代码如下:

在如上代码中第2~5行定义了一个Chronometer控件,第6~23行定义了三个按钮,并且分别设置了相应的id,方便在java文件中获取控件对象。(2)修改src/com.wyl.example/MainActivity.java文件,代码如下:

在上面代码的第54~58行得到相应的控件对象,在第21~24行给三个按钮设置了自定义的监听器,在第27~50行自定了一个单击监听器,当单击三个按钮的时候分别调用Chronometer对象的start、stop和setBase方法,实现计时器的开始、停止和重置。这里需要指出的是setBase方法设置计时器的及时开始基准点,设置为SystemClock.elapsedRealtime(),也就是从当前系统时间开始计时,也就相当于清零了计时器。

4. 实例扩展

Chronometer控件是TextView控件的一个子类,其实原理很简单就是每隔一秒钟调用一次更新内容的方法来更新Chronometer控件的显示内容。当然如果大家想制作毫秒的秒表的话,最常用的方法是通过记录当前时间的时间戳,然后用时间相减的方式来实现。范例021 圆角按钮效果

1. 实例简介

在Android中,肯定会用到按钮这个控件,这个控件我们在之前的实例中也看到了,相对也比较简单,但是现在我们应用中使用原始的按钮的效果很少。例如,QQ软件的登录框已经是一个圆角的按钮,购物网站的登录按钮是自定义颜色的按钮等。本实例就带领大家一起来完成一个圆角按钮的美化效果。

2. 运行效果

该实例运行效果如图3.21所示。

3. 实例程序讲解

在图3.21中包含了一个Button控件,但是又和我们之前看到的按钮效果不同,主要是这个按钮的四个角是圆角效图3.21 圆角按钮效果果。想要实现这样的效果就要定义按钮的背景样式了,步骤如下所示。(1)在res/drawable目录下新建名为btn_bg.xml的文件,代码如下:

在此xml中定义了按钮的背景样式,其中第5行定义了按钮的背景颜色,第7行指定了按钮的四个角的弧形角度,第9~13行定义了按钮中的文字相对于按钮边缘的距离。(2)修改res/layout/activity_main.xml文件,代码如下:

在如上代码中第11~18行定义了一个Button控件,其中第16行将之前定义好的按钮的背景样式btn_bg设置给按钮的background属性。这样的一个圆角的按钮效果就出来了。

4. 实例扩展

其实Android中对于美化按钮的控件很多,如ImageButton,这个控件具有按钮的所有功能,而且它可以设置一张图片显示在按钮上面,或者通过style的属性能够给Button快速的进行美化,常见的Button的美化style有如下几种。

□ @android:attr/button:普通按钮的效果。

□ @android:attr/buttonBarButtonStyle:按钮栏的按钮效果。

□ @android:attr/buttonBarStyle:按钮栏效果。

□ @android:attr/buttonStyle:按钮的效果。

□ @android:attr/buttonStyleInset:插入按钮的效果。

□ @android:attr/buttonStyleSmall:小型按钮的效果。

□ @android:attr/buttonStyleToggle:选项按钮的效果。

对于如上效果,大家可以自己进行练习,当然有些效果是需要高级的Android SDK版本支持的。剩下的就是大家在做自己的应用的时候选择自己喜欢的效果就可以了。3.2 Android中常见布局的使用范例022 用户注册页面的制作

1. 实例简介

我们在使用Android应用的时候,免不了要进行应用账号的注册,尤其是网站的应用客户端,如QQ软件、淘宝客户端和京东客户端等,某些功能只能注册后才可使用。本实例就带领大家通过Android中最常用的布局LinearLayout来完成一个常见的注册页面。

2. 运行效果

该实例运行效果如图3.22所示。

3. 实例程序讲解

在上面的例子效果中有很多控件,但是这些控件的摆放规则总体是以线性的形式放置的,这就需要使用LinearLayout布局了。想要实现如上效果,只要修改res/layout/activity_main.xml文件,代码如下:图3.22 用户注册页面的制作

在如上代码中第1~9行定义了一个LinearLayout——线性布局,在第52行结束了这个布局(线性布局),顾名思义就是在此布局中的所有控件都以一条线的形式来排列。在第5行,设置了orientation属性的值为vertical,代表此线性布局为垂直线性布局,也就是从上到下逐一排列。这样一个通用的注册页面就完成了。

4. 实例扩展

LinearLayout指的是线性布局,我们此实例中展示的是垂直布局,当然也可以水平布局,这样的话,在LinearLayout布局中的控件就会从左到右水平排列了,方法就是设置orientation属性的值为horizontal。范例023 学生成绩列表页面的制作

1. 实例简介

我们在使用Android应用的时候,经常会看到类似的表格布局,它主要以展现系统中的数据列表为主,如学生成绩列表和购买商品列表等。这样我们就用到了Android中另一个布局TableLayout。本实例就带领大家通过Android中的TableLayout来完成一个常见的学生列表页面。

2. 运行效果

该实例运行效果如图3.23所示。

3. 实例程序讲解

在上面的例子效果中所有控件都好像在一个表格中,在Android中实现表格的布局效果就要使用到另外的一种布局TableLayout,其中的每一行是一个图3.23 学生成绩列表页面的制作TableRow,TableRow也可以设置orientation属性的。想要实现TableLayout效果,只要修改res/layout/activity_main.xml文件,代码如下:

在如上代码中第1~9行定义了一个TableLayout,表格布局,在第12~37行、第39~61行,第63~85行和第87~109行分别定义了四个TableRow,代表此表格中的四行,并且这四个TableRow都设置了orientation属性为horizontal,代表每行中都以水平形式来排列。这样一个学生成绩列表页面就完成了。

4. 实例扩展

TableLayout一般的使用场景就是信息的列表展示,或者当你的数据来源于网络或者数据库时动态进行数据显示的时候。所以大家可以根据自己的应用需要来进行选择是否使用TableLayout布局了。范例024 登录页面的制作

1. 实例简介

我们在使用Android应用的时候,尤其是一些网站的客户端,我们必须要进行登录才可以使用一些功能,如qq登录和百度音乐的登录等。这样我们就用到了Android中另一个布局RelativeLayout。本实例就带领大家通过Android中的RelativeLayout来完成一个登录页面。

2. 运行效果

该实例运行效果如图3.24所示。

3. 实例程序讲解

在上面的例子效果中,我们的所有控件都是以相对位置来进行布局的。例如,退出按钮在输入密码按钮的下面,在屏幕的最右端;而登录按钮在退出按图3.24 登录页面钮的左边,并且也在输入密码按钮的下面。想要实现所有控件都以相对位置布局,那就要使用RelativeLayout来进行布局了。对于我们这个实例,我们只要修改res/layout/activity_main.xml文件,代码如下:

在如上代码中第1~9行定义了一个RelativeLayout(相对布局),在第22、29、30、35和36行分别使用了只有相对布局中的控件才具有的属性。这样你就可以以相对位置来进行页面的布局了。

4. 实例扩展

RelativeLayout 的使用场景很多,我们经常会遇到某个控件是相对父控件右对齐这样的需求,这时候你只有使用RelativeLayout了。在RelativeLayout中的控件会多出一些属性,这是我们程序的软件,常见的属性如下所示。

□ android:layout_above:该控件的位置在给定ID的控件的上面。

□ android:layout_below:该控件的位置在给定ID的控件的下面。

□ android:layout_toLeftOf:该控件的位置在给定ID的控件的左面。

□ android:layout_toRightOf:该控件的位置在给定ID的控件的右面。

□ android:layout_alignBaseline:该控件与给定ID的控件baseline对齐。

□ android:layout_alignTop:该控件与给定ID的控件顶部对齐。

□ android:layout_alignBottom:该控件与给定ID的控件底部对齐。

□ android:layout_alignLeft:该控件与给定ID的控件左对齐。

□ android:layout_alignRight:该控件与给定ID的控件右对齐。

□ android:layout_alignParentTop:该控件与其父控件的顶部对齐。

□ android:layout_alignParentBottom:该控件与其父控件的底部对齐。

□ android:layout_alignParentLeft:该控件与其父控件的左对齐。

□ android:layout_alignParentRight:该控件与其父控件的右对齐。

□ android:layout_centerHorizontal:将该控件水平居中。

□ android:layout_centerVertical:将该控件的垂直居中。

□ android:layout_centerInParent:将该控件相对于父控件居中。

当然还有一些属性我这里没有提到,当大家使用到的时候去Android的开发文档中查询即可。范例025 开发模型图的页面

1. 实例简介

我们在使用Android应用的时候,也有可能遇到这样一种效果,就是控件之间的位置相对独立,而且是固定不变的。例如,固定图表模板的制作、固定文档模板的制作等。这就要求我们在做这样的页面的时候只能够以屏幕坐标为基准设置控件的位置,这就用到了AbsoluteLayout(绝对布局)。本实例就带领大家使用Android中的AbsoluteLayout来完成一个软件开发模型图的页面。

2. 运行效果

该实例运行效果如图3.25所示。

3. 实例程序讲解

在上面的例子效果中,我们可以看到,其中有6个TextView,标题TextView,还有5个位置飘忽的TextView,这就要使用Android中的AbsoluteLayout来进行布局了。对于我们这个实例,只要修改res/layout/activity_main.xml文件,代码如下:图3.25 软件开发模型图页面

试读结束[说明:试读内容隐藏了图片]

下载完整电子书


相关推荐

最新文章


© 2020 txtepub下载