1、第一章 Android入门基础目录Android简介Android开发环境Android应用开发基本流程Android程序调试总结一、Android简介初识AndroidAndroid是由一种基于Linux的自由及开放源代码的操作系统,主要应用于移动设备,如智能手机、平板电脑等,由Google公司和开放手机联盟领导及开发。尚未有统一中文名称,中国较多人称为“安卓”或“安致”。Android操作系统最初是由一家名为Android的公司进行研发的,主要支持手机。Android发展历史Anroid1.0:在2008年9月发布的Android第一版。Anroid1.5:在2009年4月30日发布,命名
2、为Cupcake(纸杯蛋糕)。Anroid1.6:在2009年9月15日发布,命名为Donut(甜甜圈)。Anroid2.2:在2010年5月20日发布,命名为Froyo(冻酸奶)。Anroid2.3:在2010年12月7日发布,命名为Gingerbread(姜饼)。Anroid3.0:在2011年2月3日发布,命名为Honeycomb(蜂巢)。Anroid4.0:在2011年10月19日在香港发布,命名为Ice Cream Sandwich(冰激凌三明治)。Anroid4.1/4.2:在2012年6月28日发布,命名为Jelly Bean(果冻豆)。Anroid4.4:在2013年9月4日发
3、布,命名为KitKat(奇巧巧克力)。Anroid5.0:在2014年11月3日发布,命名为Lollipop(棒棒糖)。Anroid6.0:在2015年5月28日发布,命名为Marshmallow(棉花糖)。Anroid7.0:在2016年3月10日发布,命名为Nougat(牛轧糖)。Android应用场景Android从开始作为手机操作系统,现在逐渐成为平板电脑、智能手表、智能电视、智能眼镜、智能汽车等设备的操作系统。同时通过这些智能硬件产品的推出,相应的在该系统上的软件应用(通信、教育、监控、打车、购物、餐饮、娱乐等)也吸引了更多创新创业人才来开发这块市场。2016.62015.12 应用
4、用户规模(万)网民使用率用户规模(万)网民使用率半年增长率手机即时通信6034691.9%5571989.9%8.3%手机网络新闻5180078.9%4816577.7%7.5%手机搜索5240979.8%4778477.1%9.7%手机网络音乐4434667.6%4164067.2%6.5%手机网络视频4402267.1%4050865.4%8.7%手机网上支付4244564.7%3577157.7%18.7%手机网上购物4007061.0%3396754.8%18.0%手机网络游戏3023946.1%2792845.1%8.3%手机网上银行3045946.4%2767544.6%10.1%
5、手机网络文学2811842.8%2590841.8%8.5%手机旅行预定2322635.4%2099033.9%10.7%手机邮件1734326.4%1667126.9%4.0%手机网上外卖1462722.3%1041316.8%40.5%手机论坛/BBS846212.9%860413.9%-1.7%手机网上炒股48157.3%42936.9%12.1%手机在线教育698710.6%53038.6%31.8%表1-1 2015.122016.6 中国网民各类手机互联网应用的使用率Android体系结构Android是一个开放的软件系统,它采用分层的结构思想,由上到下分为4个层次,它们分别是:(
6、1)应用程序层(Application)(2)应用程序框架层(Application Framework)(3)核心类库(Libraries)(4)Linux内核(Linux kernel)图1-1 Android 体系结构应用程序层Android系统不单是手机操作系统,也预先在系统里安装了一组常用应该程序,包括联系人程序、短信程序、日历程序、浏览器程序等。该层是Android系统提供给应用程序层所使用的API框架,在进行应用程序开发的过程中都要使用到这些API框架,并必须遵守其开发原则,此做法的目的是减少重用组件使用的工作量。应用程序框架层核心类库核心类库由系统库与运行环境两部分组成,系统库
7、主要是由C/C+库为Android系统提供主要的特性支持,如SQLite库提供了一个对于所有应用程序可用,功能强劲的轻型关系型数据库引擎,Webkit库提供了浏览器内核的支持等。Linux内核层Android是基于Linux2.6内核,并针对手机进行了特定的裁剪与优化,如电源管理、进程管理、网络协议等。二、Android开发环境Java下载安装JDK下载:Android开发之前先要进行JDK安装,我们在Oracle官方下载最新jdk1.8,其下载地址为http:/ version,然后回车,查看JDK的版体信息,如果安装成功,则会出现如下图所示信息:图1-2 检查 JDK 安装情况ADT Bu
8、ndle下载最初进行Android开发时,先要下载Eclipse开发工具,然后下载Android SDK工具包,最后在Eclipse上添加插件ADT。图1-3 Eclipse下载SDK Manager.exeSDK Manager.exe 负责管理计算机上目前安装的各种版本的 Android SDK。当前可用的 Android SDK 版本,如图 1-4 所示。我们需要国内的代理来更新。在 Android SDK Manager 窗口的 Tools 菜单下选择Options,在弹出的 Android SDK Manager-Settings 对话框中进行代理设置,如图 1-5 所示:图1-4
9、Android SDK Manager 窗口图1-5 Android SDK Manager 代理设置SDK SDK 为开发者进行软件开发提供了丰富的库文件和其他开发工具。整个 SDK 文件夹下包括多个子文件夹,各有不同的用途,如图 1-6 所示。build-tools:各版本 SDK 的编译工具。extras:扩展开发包,如高版本的 API 在低版本中开发时使用。platforms:各版本的 SDK。根据 API Level 划分的 SDK 版本。platform-tools:各版本 SDK 的通用工具,比如 adb、fastboot 和 sqlite3 等文件 tools:各版本 SDK
10、的自带工具。如 DDMS,draw9patch,mksdcard。图1-6 Android 5.0 更新部分Eclipse Eclipse 是进行 Android 应用程序开发的一种工具,在 Eclipse 上需要安装 ADT 插件来为用户提供便捷的图标按钮操作。ADT 插件安装成功后,在 Java-Eclipse 窗口中有如图 1-7所示的 3 个图标。方框中最左边的图标表示 Android SDK 管理器,它和 SDK Manager.exe 功能相同;中间的图标是配置与启动 Android 模拟器的,Android 模拟器的大部分功能与真机效果是相同的;最右边的图标是用来检测Androi
11、d 程序代码的。点击中间的图标,出现如图 1-8 所示的窗口。图1-7 Java-Eclipse 窗口图1-8 Android Virtual Device(AVD)ManagerEclipse 模拟器创建创建名为android 5.0 模拟器,选择 3.2 英寸屏幕的手机,目标 SDK 版本为 Android 5.0,接着再指定手机内存与 SD 卡的存储空间。创建成功后,在 Android Virtual Device(AVD)Manager 窗口中会显示刚才创建的模拟器信息,然后点击右侧的 Start 按钮,弹出 Launch Options 对话框,启动成功的模拟器界面如图 1-10 所
12、示:图1-9 创建模拟器图1-10模拟器界面Android 调试工具:Android的调试工具是指位于SDK的platform-tools目录下的adb.exe,adb常用命令如下:adb start-server:开启adb服务。adb kill-server:关闭adb服务。adb devices:查看当前连接的设备。adb install:安装apk程序。adb uninstall:卸载apk程序。adb push:上传文件到设备adb pull:下载文件到设备。图1-11 adb devices命令DDMS的全称Dalvik Debug Monitor Service,为IDE、模拟器
13、与真机设备构建了一座桥梁,程序员可以通过DDMS看到目标机器上运行的进程/现成状态,可以查看进程的Heap信息,可以查看Logcat信息,可以查看进程分配内存情况,模拟拨入电话,模拟接收短信等。DDMS使用图1-12 DDMS 视图使用adb命令安装与卸载Android应用程序安装Android应用程序:在电脑的“开始”菜单附件命令提示符下,把路径切换到Android SDK的安装目录下platform-tools文件夹下。为了安装的方便,直接将QQ拼音输入法(QQshurufa_1928.apk)文件放到了platform-tools文件夹下。然后使用adb install命令将以上apk文
14、件安装到Android模拟器中。卸载Android应用程序:在电脑的“开始”菜单附件命令提示符下,把路径切换到Android SDK的安装目录下platform-tools文件夹下,使用adb uninstall命令卸载指定的Android应用程序。三、Android应用开发基本流程创建HelloWorld项目首先在Eclipse中菜单中选择File|New命令,在子菜单中选择Android Application Project命令,如果没有这个选项,则选择Other。在弹出的对话中选择Android,显示多个Android项目类型,选择Android Application Project
15、命令。点击Android Application Project命令后,弹出如右图所示:图1-13新建项目运行程序启动模拟器,然后在Eclipse中Package Explore中选择要运行的工程名HelloWorld,点击右键,在弹出的菜单中选择Run AsAndroid Application,即可在模拟器看到工程运行的界面,其结果显示如左图所示。如果需要横屏显示结果,在电脑键盘上使用CTRL+F12组合键,显示结果如右图所示。图1-14 HelloWorld 运行结果 图1-15 HelloWorld 横屏运行结果JUnit单元测试:JUnit是一个测试框架,它在AndroidSDK1.
16、5就加入了自动化测试功能,可以在单独完成某一个功能就可以进行测试,而不需要安装到真实手机或模拟器中,这样可以大大提高应用程序的开发速度与质量。一般分为两种方法:对所有方法进行测试,如图1-16,对单个方法进行测试,如图1-17:四、Android程序调试图1-16对所有方法进行测试图1-17对单个方法进行测试LogCat的使用 LogCat是Android应用开发过程中用来显示打印日志用的工具,特别是后期调试程序BUG用的比较多,类似在Java中用System.out.print输出,LogCat可以根据自己的需 要 定 制 输 出 结 果。在 A n d r o i d 应 用 程 序 中
17、进 行 信 息 输 出 时 主 要 采 用 android.util.Log 类的静态方法来实现,LogCat 划分了 5 个打印日志的级别,Log.v()、Log.d()、Log.i()、Log.w()、Log.e()五种信息输出到 LogCat 控制台。图1-18 LogCat 控制台五、总结了解Android的基本发展情况掌握Android开发环境配置以及DDMS的使用掌握Android程序开发的基本流程掌握Android程序的调试过程 第二章 Android应用结构分析目录Android应用程序目录结构Android应用程序分析 总结AndroidManifest.xml文件应用程序权
18、限说明一、Android应用程序目录结构 src目录:主要是用来存放Android应用程序中的Java代码,并且根据程序员的规定存放在相应的包下。gen目录:gen目录下的文件是在创建工程时由Eclipse插件ADT自动生成的,这个文件是只读模式的,不能更改。assets目录:assets目录存放了工程中用到的相关资源文件,如音频文件、文本文件等,并且该目录下存放的资源文件都不进行编译的原生文件。bin:该目录下存放生成的可执行文件。如果工程项目没有执行,则该目录为空。若执行后,则在该目录下生成执行文件。res目录:res目录存放了工程经常使用的资源文件,例如图片、布局等文件。layout 文
19、件夹:主要用来存放 XML 语言编写的布局文件,当然也可以使用 Java 语言来动态生成布局文件 menu 文件夹:主要用来存放 XML 语言编写的菜单布局以及 Action Bar 的声明 values 文件夹:主要用来存放各种类型的数据。proguard-project.txt 文件是混淆代码的脚本配置文件project.properties 文件是项目的配置信息,一般不进行修改。可以通过修改 target 进行Android 应用开发基础教修复 图2-1 HelloWorld 项目目录二、Android应用程序分析资源描述源文件string.xml:应用程序开发时,使用纯文本字符串中需要
20、res/values目录中的一个XML文件(通常名为res/values/string.xml),根元素为resources,希望编码为资源的每个字符串都有一个string子元素。string元素包含name特性,这是此字符串唯一的名称,还有一个文本元素,包含字符串的文本。在布局文件使用string的资源:在布局文件中引用string的资源格式(sting/,其中的省略号表示唯一的名称,例如sting/hello)。在Java代码中使用string的资源:通过使用getString()方法和字符串资源的ID来获取string.xml中资源。“+id”与“id”的区别:“+id/”表示在R文件中
21、会生成一个新的id,变量名就是“/”后面的值,例如,+id/tv_hello会在R.java文件中生成int tv_hello=value,其中value是一个十六进制的数。如果tv_hello在R.java中已经存在同名的变量就不会生成新的变量,而该组件会使用这个已存在的变量的值。“id/tv_hello”表示引用已经定义好的id。数组(Array)资源子元素,定义普通类型的数组。子元素,定义字符串类型的数组。子元素,定义整数类型的数组。数据访问方法int getIntArray(int id):根据资源文件中的整型数组资源的名称来获得实际的数据。String getStringArray(
22、int id):根据资源文件中的字符串数组资源的名称来获得实际的数据。TypedArray obtainTypedArray(int id):根据资源文件中的普通数组资源的名称来获得实际的数据。【例2.1】根据 Android 操作系统语言的不同,实现应用程序的中文版内容与英文版内容自由切换。将 Android 模拟器的语言从英文切换到中文。图2-2切换语言图2-3选择“中文简体对于Android的国际化,要在 res 目录下新建对应的字符串目录。例如若模拟器的语言是中文,则在项目的 res 目录下新建一个 values-zh-rCN 目录,然后将翻译好的 strings.xml 或array
23、s.xml 文件放到该目录下即可。下面给出部分国家的文件目录名称(应用程序中默认文件夹名为 values,用英文表示,加上后缀后变为相应国家)。中文(中国):values-zh-rCN。希腊文:values-el-rGR。法文(法国):values-fr-rFR。英语(英国):values-en-rGB。英文(澳大利亚):values-en-rAU。英文(加拿大):values-en-rCA。【例2.1】运行结果如图 2-4所示,桌面程序显示如图 2-5 所示。图2-4 切换语言图2-5 选择“中文简体【例2.2】编写一个读取 Array 数组中天气信息的应用程序。创建一个名为 Array_A
24、ctivity 的项目,包名为 com.hzu.array_activity,Activity 组件名为 MainActivity。在 res/values 目录下新建一个名为 arrays.xml 的文件。编写逻辑代码。打开 src/com.hzu.array_activity 下包中的 MainActivity.java 文件【运行结果】在 Eclipse 中启动 Android 模拟器,接着运行 Array_Activity 项目,在 Eclipse 的 LogCat 控件台显示的信息如图 2-6 所示。图2-6 Array数组中显示的信息颜色Color资源 RGB:分别指定红、绿、蓝三
25、原色的值(只支持0f这16级颜色)来代表颜色。ARGB:分别指定红、绿、蓝三原色的值(只支持0f这16级颜色)以及透明度(只支持0f这16级透明度)来代表颜色。RRGGBB:分别指定红、绿、蓝三原色的值(支持00ff这256级颜色)来代表颜色。AARRGGBB:分别指定红、绿、蓝三原色的值(支持00ff这256级颜色)以及透明度(支持00ff这256级透明度)来代表颜色。【例 2.3】使用 RGB 分别表示默认颜色、红色、绿色三种字体颜色。Drawable资源Drawable资源是Android应用程序开发过程中经常使用的资源。Android通过Drawable来处理图像,可能是一张图片(*.
26、png、*.jpg、*.gif等),也可能是一个逐帧动画,可能是一片红色区域,更可以是一个xml文件。Drawable资源通常保存中在res/drawable目录下,为了适应不同尺寸手机的屏幕分辨率,具体可能保存中/res/drawable-ldpi、/res/drawable-mdpi、/res/drawable-hdpi、/res/drawable-xhdpi、/res/drawable-xxhdpi目录下【例 2.4】编写关于一个 Button 按下与抬起以及一个 CheckBox 被选中与未被选中显示效果的应用程序dimens.xmlpx(像素):屏幕上的点,绝对长度,与硬件相关。mm
27、(毫米):长度单位。in(英寸):长度单位。pt(磅):1/72英寸。dp(与密度无关的像素):一种基于屏幕密度的抽象单位。在每英寸160点的显示器上,1dp=1px。注意随着设备的屏幕密度的改变,dp与px之间的换算会有所改变。sp(可伸缩例素):使用与dp相同的设计理念。主要用于字体大小显示。style.xml在Android系统中,预先定义了很多的样式与主题,这些样式与主题主要用于使布局显示呈现在用户面前更加美观。style 定义的步骤1)判断需要统一 style 的控件有哪些属性是一致的。2)在 value 的 style.xml 中定义自己的 style。style 的 name 决
28、定了style 后的名字。每一项 item 都是一个布局中的属性,分别对应属性名和属性值。style 继承 parent 中定义过的属性值。3)在 XML 布局中,控件使用自定义的 style,例如:style/stylename三、布局文件在创建 HelloWorld 项目成功后,activity_main.xml 在 HelloWorld 项目的 res/layout 目录下,注意其格式规范规律。1)设置其内容要求均以“android:”开头,例如定义布局的高度和宽度:android:layout_width=match_parentandroid:layout_height=match_
29、parent2)布局标签的开始标签和结束标签成对存在,布局可镶嵌。四、AndroidManifest.xml文件AndroidManifest.xml文件提供了应用程序的基本信息,是一个功能清单文件,相当于是应用程序的全局描述。在创建一个新工程成功后,Eclipse下的ADT会自动创一个AndroidManifest.xml文件,每一行为一个TableRow。1)android:versionCode 表示应用程序的相对版本,即版本更新过多少次。2)android:versionName 表示应用程序的版本信息,需要显示给用户。3)android:minSdkVersion 表示使用 Andr
30、oid SDK 的最低版本。4)android:targetSdkVersion 表示应用程序的目标版本。在应用程序中,遇到需要访问网络等情况时,在AndroidManifest.xml中规定要使用权限声明。这种做法的优势可以指定其它应用程序是否有权限访问该程序。在 AndroidManifest.xml 中声明允许访问网络的权限格式如下:1 3 通过上面的代码可知权限声明的用法非常简单。五、应用程序权限说明在 Android 中有很多种权限,并且这些权限声明都放在 AndroidManifest.xml 中,下面介绍一些比较常用的权限,如表 2-1所示。六、总结了解Android应用程序目录
31、结构掌握Android应用程序中各个文件基本属性与使用方法AndroidManifest.xml文件了解Android程序程序权限 第三章 基本控件和事件处理目录基本控件概述Android基本的控件总结Android事件处理一、基本控件概述Android应用开发是一个基于图形用户界面(Graphical User Interface,简称 GUI)的开发,为了达到用户满意的界面,最后通过点击相关图形界面,就能很好的操作这个应用,所以程序员设计的应用程序必须以用户友好性为前提。Android提供了大量功能强大的UI组件,并且这些组件配合使用事件响应机制,能完成用户点击后的相关动作行为,这些组件我
32、们就称为控件。关于View类的属性 View类常用的XML属性属性方法含义android:backgroundsetBackgroudResource(int)设置背景android:clickablesetClikable(boolean)设置View是否响应单击事件android:visiblesetVisible(int)控制View的可 见性android:focusablesetFocuable(boolean)控件View是否可以获取焦点android:idsetId(int)为View设置标识符,可通过findViewById方法获取二、Android基本的控件所有可视控件都继承
33、View类属性。表3-1 View常用的属性ViewGroupViewGroup(视图组)是android.view.Viewgroup的一个实例,是一特殊类型的视图,可以视为View的容器。ViewGroup的子控件既可以是View类,也可以是ViewGroup类。使用ViewGroup可以创建比较复杂的界面元素。TextView类常用的属性TextView属性方法含义android:textsetText(charSequence)设置TextView显示文本的内容android:textSizesetTextSize(float)设置TextView的文本大小android:textCo
34、lorsetTextColor(ColorStateList)设置TextView的文本颜色android:textStylesetTextStyle(TextStyle)设置TextView的文本风格(如粗体、斜体)android:gravitysetGravity(int)设置TextView在文本框内文本的对齐方式android:linessetLines(int)设置TextView最多占几行android:heightsetHeight(int)设置TextView的高度,以像素为单位android:widthsetWidth(int)设置TextView的宽度,以像素为单位andr
35、oid:paddingSetPadding(int)设置TextView中显示文本与其父容器边界的间距表3-2 TextView常用属性以上属性的区别android:padding与android:layout_margin的区别 Padding是以父View为参考点,规定它里面的内容与这个父View边界的距离。layout_margin是以自己为参考点,规定自己和其它(上下左右)的View之间的距离,如果在当前这一级只有一个View,那它设置的效果就和Padding一样。android:gravity与android:layout_gravity的区别gravity用于设置这个View内所有
36、子元素的对齐方式;layout_gravity用于设置这个View在父容器中的对齐方式。特别说明:TextView的属性之android:textSize设置标签中字体的大小,它一般以单位sp来表示字体大小单位。【例 3.1】设计如图 3-1所示的布局文件。图3-1 Text Viewde 效果1 /结束标志 Button控件按钮 Button 继承了 TextView,其主要的作用是在界面上生成一个按钮,当需要用户点击界面某个区域来产生特定的行为时,就可以使用 Button。用户点击这个按钮后将会触发一个 onClick事件,还要为按钮添加 setOnClickListener()方法才能真
37、正实现完整的事件监听。在JAVA文件中进行编写关联。Button 控件位于 Android.widget.Button 类中,如果 Java 代码中使用这个控件,需要在头部添加“import android.widget.Button;”语句。EditText EditText(输入框)可以向用户显示文本内容,也允许用户对文本内容进行编辑,它为TextView的子类,拥有TextView所有属性。最主要用途是用户登录界面,如用户名与密码等信息的输入。EditText定义位于Android.widget.EditText类中,如果Java代码中使用这个控件,需要的头部添加“import andr
38、oid.widget.EditText;”。EditText特有属性:android:digits:指定字段只接受某些字符;android:hint:输入为空时给的提示;android:inputType:限定输入的字符类型;android:singleLine:控制字段是单行输入框还是多行输入框(换句话说,按回车键是将焦点移到下一个部件,还是换行)。ImageViewImageView类常用的属性属性方法含义android:adjustViewBoundssetAdjustViewBounds(boolean)是否保持图片的宽高比android:maxHeightsetMaxHeight(i
39、nt)设置View的最大高度android:maxWidthsetMaxWidth(int)设置View的最大宽度android:srcsetImageResource(int)设置View的drawable(如图片,也可以是颜色,但是需要指定View的大小)android:scaleTypesetScaleType(ImageView.ScaleType)调整或移动图片来适应ImageView的尺寸,当scaleType 取值为fitXY时拉伸图片(不按比例)以填充View的宽高;当scaleType取值为Center时按原图大小居中显示;当scaleType取值为centerCrop时按比
40、例扩大图片居中显示;当scaleType取值为fitCenter时把图片按比例扩大/缩小到View的宽度并居中显示。表3-3 ImageView常用属性 CheckBox(复选框)方法含义isChecked()判断是否被选中,如选中则为true,否则为false。setChecked(boolean checked)通过传参来改变控件的状态。performClick()使用代码主动去调用控件的点击事件。toggle()取反控件选中的状态,即原来是选中则返回未选中,原来未选中则返回选中。setOnCheckedChangeListener(CompoundButton.OnCheckedChan
41、geListener listener)为控件添加OnCheckedChangeListener监听器。CheckBox常用方法表3-4 CheckBox常用属性 RadioButton和RadioGroup RadioButton与CheckBox不同的,在于一组CheckBox可以一次选中多个,而RadioButton只能选中其中一个,所以RadioButton通常要与RadioGroup一起使用,用于定义一组单选按钮。如下图所示:图3-2 一个RadioButton效果 DatePicker(日期控件)DatePicker常用方法 方法含义getYear()获取当前日期的年getMont
42、h()获取当前日期的月getDayOfMonth()获取当前日期的日setMaxDate(long maxDate)设置最大日期setMinDate(long minDate)设置最小日期updateDate(int year,int month,int dayOfMonth)更新当前日期init(int year,int monthOfYear,int dayOfMonth,DatePicker.OnDateChangedListener onDateChangedListener);初始化日期,以onDateChangedListener为监听器对象,监听日期的变化表3-5 DatePic
43、ker常用方法 TimePicker(时间控件)TimePicker常用方法 方法含义getCurrentHour()获取当前时间的小时getCurrentMinute()获取当前时间的分钟is24HourView()获取是否为24小时模式setCurrentHour(Integer currentHour)设置当前时间的小时setCurrentMinute(Integer currentMinute)设置当前时间的分钟setIs24HourView(Boolean is24HourView)设置24小时模式setEnabled(Boolean enabled)设置时间控件是否可用setOnT
44、imeChangedListener(TimePicker.OnTimeChangedListener onTimeChangedListener)为时间控件添加OnTimeChangedListener监听器表3-6 TimePicker常用方法三、Android事件处理 基于回调的事件处理 对于回调的事件处理,主要的实现方法是通过重写Android中特定组件的回调方法和Android中Activity的回调方法。基于监听的事件处理 对于监听的事件处理,主要的实现方法是为Android界面上的控件绑定特定的事件监听器,为程序员处理各种逻辑操作。一般情况下,基于回调的事件处理用于处理一些具有普
45、遍性的事件;有些操作在无法基于回调的事件处理时,就要使用基于监听的事件处理。基于回调的事件处理 onKeyDown()方法声明格式:boolean onKeyUp(int keyCode,KeyEvent event)onKeyUp()方法声明格式:boolean onKeyUp(int keyCode,KeyEvent event)onTouchEvent()方法声明格式:public boolean onTouchEvent(MotionEvent event)【例 3.7】在屏幕区域内捕获用户的触击、抬起与滑动事件,并记录相关事件的坐标。在 res/layout 目录下的布局xml文件中
46、编写代码。在 src/com.hzu.touch_activity 目录下的java文件中编写代码。图3-3屏幕区域内捕获用户操作基于监听的事件处理 EventSource(事件源):产生这个事件的组件即事件发生的来源,如按钮、窗口等。Event(事件):UI上面的事件源发生的特定的事件,并且该事件封装了该操作的相关信息,当应用程序需要知道事件源上所发生事件的具体信息,一般都是由Event对象来取得,如用户触摸屏幕的位置等。EventListener(事件监听器):监听事件源发生的事件,并对被监听的事件做出相应的响应。一个事件监听器可包含多个事件处理器,每一个事件处理器就是一个事件处理方法。应
47、用程序中实现监听器的四种形式匿名内部类实现:使用匿名内部类创建事件监听器。外部类实现:将外部类实现事件监听器接口。内部类实现:将事件监听器类定义为当前类中。使用标签实现:直接在布局文件中指定标签绑定事件处理方法,主要是在布局文件中使用android:onClick来实现。【例 3.8】实现一个简单的文字处理器,其可以改变文字背景、文字样式,且具有更改文字、擦除文字的功能。图3-4 简单的文字处理器监听器四种形式的优缺点内部类形式:可以在当前类中复用该监听器类,即多个事件源可以注册同一个监听器;可以自由访问外部类的所有界面控件,内部类实质上是外部类的成员。外部类形式:不能自由访问创建GUI界面中
48、的组件且编程不够简洁,某个事件监听器确实需要被多个GUI界面所共享,且主要是完成某种业务逻辑的实现,则可以考虑使用外部类的形式来定义事件监听器类。匿名内部类形式:这种事件处理器都没有什么复用价值,大部分事件监听器只是临时使用一次,所以使用匿名内部类形式的事件监听器比较常见。使用标签形式:这种事件处理器涉及到布局文件与Java代码两个部分的处理,对于少量事件监听还是可以的,灵活度不是很高。四、总结掌握Android各类基本控件的使用理解Android事件处理机制 第四章 布局目录布局简介常见布局总结嵌套布局一、布局简介当界面有多少控件时,需要按照需求进行合理摆放,布局管理器是用来安排内部控件所在
49、的位置。所有的布局管理器都是继承ViewGroup类的子类,都可以作为一个容器来使用。布局内部的控件被认为布局的子控件,一个布局也可以成为另外一个布局的子控件,即布局管理器可以嵌套其它布局管理器。二、常见布局Layout(布局)是ViewGroup的实现类(即子类),为视图控件提供排列结构。常用的布局:FrameLayout(帧布局)LinearLayout(线性布局)TableLayout(表格布局)RelativeLayout(相对布局)AbsoluteLayout(绝对布局)布局参数:布局参数定义控件的位置、尺寸等属性。控件的位置由视图的左上点坐标、对齐方式等属性确定。控件的尺寸由视图的
50、宽度、高度等属性确定。Layout常见布局常见布局FrameLayout(帧布局)是最简单的布局方式。从屏幕的左上角开始显示子元素。后添加的子元素覆盖前一个子元素。【例 4.1】设计出如图 4-1 所示的布局文件。图4-1 帧布局显示效果常见布局常见布局LinearLayout(线性布局)是最常用的布局方式。以水平或垂直的方式排列子对象一个方向只能有一个对象。【例 4.2】设计如图 4-2 所示的布局文件 图4-2 水平线性布局图4-3 垂直线性布局常见布局常见布局LinearLayout 常用属性(布局参数):andriod:orientation:设置排列方向android:layout_