版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Android系统开发 教学大纲一、说明(一)课程性质 本课程为学院平台课程,为专业选修课,由学生根据学习需要选修。(二)教学目的 本课程主要从Java基础开始学习,循环渐进,以培养移动应用开发工程师为目标,深入讲解 Android 开发方法并进行实践,使学生掌握移动应用的开发流程、方法和技术,提升学生的软件开发素养。 (三)教学内容 课程从项目情境出发,引导学生学习开发。具体内容包括:Android环境的搭 建,Android项目结构分析,用户界面设计,2D、3D图形绘制,数据存储与访问,定位服务与地图应用,网络编程,Android NDK开发及综合案例。 (四)教学时数 36学时讲授,36
2、学时实验,每周4学时。合计72学时。(五)教学方式多媒体机房教学、案例导向、项目驱动等教学方法、启发学生对学科知识的把握理解和实际操作能力。 课程教学方法的改革以调动学生的积极性为核心。除讲授、提问、学生分析、讨论等常用的方法外,结合管理课程的特点,适应本科生培养的要求,探索并完善以 参与式、体验式、交互式和模拟教学等实践教学为基本形式的多种方法。并建立纸质、声音、电子、网络等多种媒体构成的立体化教学载体。 通过实训和案例分析,把学科理论的学习融入对经济活动实践的研究和认识之中,切实提高分析问题、解决问题的能力。二、本文理论部分第1章 Android基础知识教学要点:Android 开发平台搭
3、建Android程序开发过程教学时数: 6学时教学内容:1.1 Android概述Android 是Google开发的基于Linux平台的开源 HYPERLINK /hy/%E6%89%8B%E6%9C%BA%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F t _blank 手机操作系统。它包括操作系统、用户界面和 HYPERLINK /hy/%E5%BA%94%E7%94%A8%E7%A8%8B%E5%BA%8F t _blank 应用程序等移动电话工作所需的全部软件,而且不存在任何以往阻碍移动产业创新的专有权障碍。Google与 HYPERLINK /hy/%E5%
4、BC%80%E6%94%BE%E6%89%8B%E6%9C%BA%E8%81%94%E7%9B%9F t _blank 开放手机联盟合作开发了 Android,这个联盟由包括中国移动、摩托罗拉、高通、宏达电和 HYPERLINK /hy/T-Mobile t _blank T-Mobile 在内的 30 多家技术和无线应用的领军企业组成。Google通过与运营商、设备制造商、开发商和其他有关各方结成深层次的 HYPERLINK /hy/%E5%90%88%E4%BD%9C%E4%BC%99%E4%BC%B4%E5%85%B3%E7%B3%BB t _blank 合作伙伴关系,希望借助建立标准化
5、、开放式的移动电话软件平台,在移动产业内形成一个开放式的生态系统。1.2 Android的特征1.2.1 Android系统平台五大特色1.开放性2.挣脱运营商的束缚3.丰富的硬件选择4.不受任何限制的开发商5.无缝结合的Google应用1.2.2Android的优势1. Android 系统的稳定性赢得了厂商的青睐 2.Android系统的开源特性使得厂商可以随意打上自己的印记 3.Android系统的免费特性 1.3 Android环境的搭建1.3.1安装Android SDK的最低硬件需求1.3.2 Android SDK软件开发组件1Android Linux系统内核2. Androi
6、d仿真器3.Eclipse图形界面开发环境 4. Dalvik虚拟机器5.Android除错工具6. Android应用程序架构1.3.3 Android 开发环境搭建1下载Java JDK2.Eclipse IDE 下载3.Android SDK下载器 Android的系统架构教学要点:Android系统架构应用程序基本组件应用程序生命周期资源AndroidManifest.xml文件教学时数: 6学时教学内容:2.1 Android的系统架构Android作为一个移动设备的开发平台,其系统架构和其他操作系统一样,采用了分层的架构。从架构图2-1看,android从高层到低层分为以下几个层次
7、。应用程序层(Application)应用程序框架层(Application Framework)各种库(Libraries)和运行环境(RunTime)linux核心层(OS)图2-1 Android系统架构图2.1.1应用程序(Application)Android的应用程序通常涉及用户界面和用户交互,这类程序是用户实实在在能感觉到的。Android会同一系列核心应用程序包一起发布,该应用程序包包括email客户端,SMS短消息程序,日历,地图,浏览器,联系人管理程序等。所有的应用程序都是使用JAVA语言编写的。2.1.2应用程序框架(Application Framework)普通开发者
8、可以使用Android基本应用程序使用的系统API,Android 应用框架中的各个模块都可以被复用,各种服务也可以被复用,理解了这个机制,开发人员可以更好更轻松地开发出优秀的Android应用。开发过程中常用到的基本框架组件如下:一组View(UI 组件),这些UI组件包括Button(按钮),EidtView(文本框),TextView(标签),List(列表)等等,灵活运用这些组件可以快速方便的创建良好的用户交互界面。Content Providers(内容提供者),听起来有点抽象,通俗的理解Content Provider 就是提供一种服务,通过这种服务应用程序之间可以实现数据的互相访
9、问和共享,比如通讯录的存储就使用了这种服务,其它应用也可以访问通讯录中存储的联系人信息。Resource Manager 顾名思义就是资源管理,android中的资源很多,包括图片,用户界面(Layout xml),字体,颜色,UI组件的Id等等都可以称之为资源,这些丰富的资源,都是通过Resource Manager来统一进行管理。Notification Manager(消息通知管理),它在不影响用户正常操作和使用设备的时候在状态栏上提供消息的提示。比如有短信来的时候,android自动会将这个消息提示在状态栏上,用户可以及时的看到。Activity Manager(活动管理),Activ
10、ity管理着应用程序的生命周期,并且控制着应用的导航,扮演控制器的角色。每个Activity类似于Windows应用中的一个wendow。一般的应用都是通过一个个Activity交互构成的。Window Manager(窗口管理),管理所有启动的窗口。Location Manager(位置管理),用来管理地图服务的相关功能。Telephoney Manager(电话管理),用来管理有关的电话的相关功能。Package Manager(包管理),管理所有的安装在android系统内的应用程序。2.1.3 各种库(Libraries)和运行环境(RunTime)这部分内容开始涉及底层,开发普通的应
11、用不会直接对这个层进行操作。以下是一些核心库。系统C库(libc),一个从BSD集成来的标准C系统函数库(libc)它是专门为基于嵌入式Linux的设备定制的。媒体库(Media Framework),基于PackeVideo OpenCore,该库支持多种常用的音频,视频格式以及回放和录制,同时支持静态图像文件。编码格式包括:MPEG4、H.264,MP3、AAC、AMR、JPG、PNG。Surface Manager 对显示子系统的管理,并且为多个应用提供2D,3D图层的无缝融合。WebKit,一个最新的web浏览器引擎,用来支持Andiroid浏览器或者嵌入的web视图。SGL, 底层的
12、2D图形引擎。OPENGL|ES,基于OpenGL ES 1.0 APIs实现,该库可以使用硬件3D加速或者使用高度优化的3D软加速。FreeType,位图(bitmap)和适量(vector)字图显示支持。SQLite,一个对所有应用程序可用,功能强大的轻量级关系型数据库引擎。Core Libraries 该核心库提供了Java编程语言核心库的大多数功能。Dalvik VM, android平台的一个虚拟机,它相当于PC中Java的虚拟机JVM。Android 的各种库一般是以系统中间件的形式提供的,它们均有的一个显著特点就是与移动设备的平台的应用密切相关。Android运行环境主要指的虚拟
13、机技术Dalvik。Dalvik虚拟机和一般Java虚拟机(Java VM)不同,它执行的不是Java标准的字节码,而是Dalvik可执行格式(.dex)的执行文件。在执行过程中,每一个应用程序即一个进程(Linux的一个Process)。二者最大的区别在于Java VM是以基于栈的虚拟机(Stack-based),而Dalvik是基于寄存器的虚拟机(Register-based)。显然,后者最大的好处在于可以根据硬件实现更大的优化,这更适合移动设备的特点。Dalvik虚拟机依赖于linux内核的一些功能,比如线程机制和底层内存管理机制。2.1.4 Linux 内核Android 的核心系统服
14、务依赖于 Linux 2.6 内核,如安全性,内存管理,进程管理, 网络协议栈和驱动模型。 Linux 内核也同时作为硬件和软件之间的抽象层,使得应用程序开发人员无需关心硬件细节。对于手机的开发商而言,如果想要Android平台运行到自己的硬件平台上就必须对Linux内核进行修改,通常要做的工作是为自己的硬件编写驱动程序。2.2应用程序的基本组件应用程序五大组件。1. Activity2. Service3. Broadcast Receiver4. Content Provider5Intent然而,并不是所有的应用程序都必须包含上面的五个部分,你的应用程序可以由上面的一个或几个来组建。当你
15、决定使用以上哪些组件来构建Android应用程序时,你应该将它们列在AndroidManifest.xml文件中,在这个文件中你可以声明应用程序组件以及它们的特性和要求。2.2.1 Activity 简介在Android程序中Activity代表了手机的一个屏幕,好比A应用中的一个网页,一个android应用相当于一个web站点。窗口中的可视内容被一系列层次的视图(view)提供派生自 HYPERLINK /reference/android/view/View.html t _blank View类的对象(后续章节会详细介绍)。视图就是 activity与用户交互的地方。例如,当用户触动一个
16、显示小图片的视图时,会触发一些动作。Android提供了很多现成的视图供你使用包括按钮,文本框,滚动条,菜单项,复选框还有更多。整个视图层次通过 HYPERLINK /reference/android/app/Activity.html l setContentView%28android.view.View%29 t _blank Activity.setContentView()方法放到 activity的窗口上。下图2-2显示了View的层次结构。图2-2 View的层次结构图当一个新的屏幕打开后,前一个屏幕将会暂停,并保存在历史堆栈中。用户可以返回到历史堆栈中的前一个屏幕。当屏幕不再
17、使用时,还可以从历史堆栈中删除。默认情况下,Android 将会保留从主屏幕到每一个应用的运行屏幕。同一应用中的每个 Activity 是相互独立的。程序启动后显示的第一幅画面是应用程序的第一个 Activity (默认窗口),而后可以根据需要从这个 Activity 启动另一个新的 Activity 。每一个都是作为Activity基类的一个子类的实现。有两个方法是几乎所有的Activity子类都实现的:(1)onCreate(Bundle):初始化你的活动(Activity),比如完成一些图形的绘制。最重要的是,在这个方法里你通常将用布局资源(layout resource)调用setCo
18、ntentView(int)方法定义你的UI,和用findViewById(int)在你的UI中检索你需要编程地交互的小部件(widgets)。setContentView指定由哪个文件指定布局(main.xml),可以将这个界面显示出来,然后我们进行相关操作,我们的操作会被包装成为一个意图(Intent),然后这个意图对应有相关的activity进行处理。(2)onPause():处理当离开你的活动时要做的事情。最重要的是,用户做的所有改变应该在这里提交(通常ContentProvider保存数据)。2.2.2 Service 简介Service没有可见的用户界面,但能够长时间运行于后台。一
19、个最好的例子是媒体播放器通过一个播放列表来播放歌曲。这个播放器程序或许有一个或多个activity,来允许用户选择音乐和播放它们。然而,音乐本身不能被activity处理,因为用户希望当他们离开播放器窗口去做其他的事情时,音乐仍然能够播放。为了让音乐能够继续,媒体播放器的 activity可以启动一个在后台运行的服务。系统应该保证音乐服务运行,即使启动的activity窗口已经不在主屏幕上了。所以,我们需要这样的机制长时间在后台运行的Service。Service运行于应用程序进程的主线程中,因此Service不会阻塞其他组件和用户界面。Service是不能自己启动的,必须通过Context对
20、象(如一个Activity)调用startService或bindService方法来启动(用这两种方法启动的Service的生命周期不同)。2.2.3 Broadcast Receiver 简介Broadcast Receiver是对发送出来的Broadcast进行过滤接收并响应的一类组件。广播是一种同时通知多个对象的事件通知机制。Android中的广播要么来自于系统,要么来自普通应用程序。很多事件都可能导致系统广播,如手机所在时区发生变化,电池电量低,用户改变系统语言设置等。来自普通应用程序,如一个应用程序通知其他应用程序某些数据已经下载完毕。为了响应不同的事件通知,应用程序可以注册不同的
21、Broadcast Receiver。所有的Broadcast Receiver都继承自基类BroadcastReceiver。BroadcastReceiver自身并不实现图形用户界面,但是当它收到某个通知后,BroadcastReceiver可以启动Activity作为响应,或者通过NotificationMananger提醒用户。2.2.4 Content Provider 简介 在Android中,每个应用程序都是用自己的用户ID并在自己的进程中运行。这样的好处是,可以有效地保护系统及应用程序,避免被其他不正常德应用程序所影响,每个进程都拥有独立的进程地址空间和虚拟空间。Content
22、 Provider可以将应用程序特定的数据提供给另一个应用程序使用。其数据存储方式可以是Android文件系统、SQLite数据库或者其他合理的方式。当数据需要在应用程序间共享时,我们就可以利用ContentProvider为数据定义一个URI。之后,其他应用程序对数据进行查询或者修改时,只需要从当前上下文对象获得一个ContentResolver,然后传入响应的URI就可以了。Content Provider继承自基类ContentProvider,并且实现了一组标准接口。通过这组接口,其他应用程序能对数据进行读写和存储。然而,需要使用数据的应用程序并不是直接调用这组方法,而是通过调用Con
23、tentResolver对象的方法来完成。ContentResolver对象可以与任意ContentProvider通信。要为当前应用程序的私有数据定义URI,就需要专门定义一个继承自ContentProvider的类,然后根据不同的操作调用的方法去实现这些方法的功能。ContentResolver类为应用程序提供了接入Content机制的方法。要构造一个ContentResolver对象可以为构造方法ContentResolver(Context context)传入一个Context对象,也可以直接通过Context对象调用getContentResolver()方法获得有了Content
24、Resolver对象后,就可以通过调用其query()、insert()、update()等方法来对数据进行操作了。2.2.5 Intents连接组件的纽带以上4种基本组件中,除了Content Provider是通过Content Resolver激活外,其他3种组件Activity、Service和Broadcast Receiver都是由Intent异步消息激活的。Intent在不同的组件之间传递消息,将一个组件的请求意图传给另一个组件。因此,Intent是包含具体请求信息的对象。针对不同的组件,Intent所包含的消息内容有所不同,且不同组件的激活方式也不同,且不同类型组件有传递Int
25、ent的不同方式。Intent是一种运行时绑定(runtime binding)机制,它能够在程序运行的过程中连接两个不同的组件。通过Intent,你的程序可以向Android表到某种请求或者意愿,Android会根据意愿的内容选择适当的组件来处理请求。对于Intent更深入的介绍在后续章节中。2.3 应用程序生命周期2.3.1应用程序的生命周期应用程序的生命周期是在Android系统中进程从启动到终止的所有阶段,也就是Android从启动到停止的全过程。Android应用程序的生命周期的终结这个动作并非由应用程序进程本身执行,而是取决于Android系统。那么,系统是根据一个怎样的重要性标准
26、来终止Android应用程序呢?Android根据应用程序的组件以及组件当前运行状态将所有的进程按重要性程度从高到低划分为五个,如下图2-6所示:图2-6 Android进程的优先级1.前台进程前台进程是Android系统中最重要的进程,是与用户正在进行交互的进程。有以下四种情况。Activity正在与用户进行交互进程被Activity调用,而且这个进程正在与用户进行交互进程服务正在执行声明中的回调函数,如OnCreate()OnStart()OnDestroy()进程的BroadCastReceiver在执行OnReceive()函数Android系统在多个前台进程同时运行时,可能会出现资源
27、不足的情况,此时会清除部分前台进程,保证主要的用户界面能够及时响应。2.可见进程可见进程是指部分程序界面能够被用户看见,却不在前台与用户交互,不影响界面事件的进程。一个常见的例子是,看见进程的窗口显示在屏幕上,同时前台进程以对话框的形式悬浮在可见进程的窗口上。如果一个进程包含服务,且这个服务正被用户可见的Activity调用,此进程同样被视为可见进程。Android进程一般存在少量的可见进程,只有在特殊情况下,Android系统才会为保证前台进程的资源而清除可见进程。3.服务进程服务进程是指包含已启动Service(服务)的进程。这些进程没有用户界面并且在后台长期运行。Android系统除非不
28、能保证前台进程和可见进程所必要的资源,否则不强行清除服务进程。4.后台进程后台进程是指不包括任何已经启动的Service(服务),而其没有任何用户可见的Activity的进程。Android系统中一般存在数量较多的后台进程,在系统资源紧张时,系统将优先清除用户较长时间没有见到的后台进程。5.空进程空进程是不包含任何Activity的进程。这种进程存在的唯一理由是提供一种缓存机制,使得缩短应用程序下次启动所需的时间。系统会经常中止空进程,从而达到调节程序缓存和系统缓存的平衡。空进程在系统紧张时会被首先清除。除了以上优先级以外,以下两个方面也决定了优先级。进程的优先级取决于所有组件中优先级最高的部
29、分。进程的优先级会根据其他进程的依赖关系而变化。2.3.2 Actvity生命周期每个Actvity的状态由它所在Activity栈中的位置所决定,所有当前正在运行的Actvity将遵循后进先出的原则。当一个新的 Activity启动,当前的Activity将移至堆栈的顶部,如果用户使用Back按钮,或在前台Activity被关闭,下一个Activity将被激活并且移至到堆栈的顶部。这个过程如下图2-7所示:图2-7 Activity堆栈图随着Activity的创建和销毁,可能会经历以下四种状态:Active(活跃)状态:这时候Activity处于栈顶,且是可见的,有焦点的,能够接收用户输入。
30、Android会尽可能维持处于活跃状态的Activity,甚至中止其他Activity以确保它有它所需的资源。当另一个Activity变成Active时,当前的将变成Paused状态。Paused(暂停)状态:在某些情况下,你的Activity是可见的,但没有焦点,在这时候,Actvity处于Paused状态。例如,你的 Activity处于暂停状态,有一个透明或非全屏幕上的Activity在你的Actvity上面。当处于Paused状态时,该Activity仍被认为是Active的,但是它不接受用户输入事件。一般情况下,Android不会结束处于暂停状态的Activity,在极端情况下,如果
31、资源极其不足,系统将结束暂停的Activity,以进一步回收资源。当一个Actvity完全被遮住时,它将进入Stopped状态。Stopped (结束)状态:当Activity是不可见的时,Activity处于Stopped状态。Activity将继续保留在内存中保持当前的所有状态和成员信息,假设系统别的地方需要内存的话,这时它是被回收对象的主要候选。Inactive(已被销毁或未启动)状态:Activity彻底结束或关闭后,处于Inactive状态。这时Activity从Activity堆栈中已被移除,需要重新启动才可以显示和使用。Activity的生命周期是指一个Activity从创建到销
32、毁的过程,期间可能经历多个状态的变化迁移,每次状态迁移都会触发相应的回调方法。以下就是Activity的回调方法:onCreateonStartonRestartonResumeonPauseonStoponDestroy我们还可以把以上7种状态归纳为三组。完整的生命周期可见的生命周期活跃的生命周期表2-1给出了三种生命周期所对应的回调函数。表2-1 三种生命周期所对应的回调函数生命周期函数描述完整的生命周期onCreate()onDestroy()进程的生命周期,只要进程还在,这个生命就没有死亡,进程启动时onCreate()函数被调用,onDestory()进程结束。可见的生命周期onSt
33、art()onStop()可见的生命周期,顾名思义,在用户界面上显示该activity时,onStart()被调用,该activity从用户界面消失时,onStop()被调用。活跃的生命周期onResume()onPause()活跃的生命周期,当该activit在所有activity最前面,即栈顶时,onResume()被调用,当activit被其他activity覆盖,onPause()被调用。Activity完整的生命周期完整的Activity生命周期之间从调用的OnCreate开始,到调用onDestroy结束。有可能在某些情况下,一个Activity被终止时并不调用onDestroy方
34、法。使用OnCreate方法来初始化你的Activity:初始化的用户界面,分配引用类变量,绑定数据控件,并创建服务和线程。在OnCreate方法传递的对象Bundle包含最后一次调用onSaveInstanceState保存的UI状态。你可以使用这个Bundle恢复用户界面到以前的状态,无论是OnCreate方法或通过覆盖onRestoreInstanceStateMethod方法。覆盖onDestroy方法来清理OnCreate中创建的任何资源,并确保所有外部连接被关闭,例如网络或数据库连接。为了避免创造短期对象和增加垃圾收集的时间,以致对用户体验产生直接影响。如果你的Activity需要
35、创建一些对象的话,最好在onCreate方法中创建,因为它仅调用一次在一个Actvity的完整生命周期中。Activity可见的生命周期一个Activity可见的生命周期始于OnStart调用,结束于OnStop调用。在这两个方法中间, Activity将会对用户是可见的,尽管它可能没有焦点,也可能部分被遮挡着。在一个Activity完整的生命周期中可能会经过几个Activity可见的生命周期,比如应用程序在在前台和后台之间反复切换。OnStop方法用于暂停或停止动画,线程,定时器,服务或其他专门用于更新用户界面程序。当用户界面是再次可见时,使用OnStart(或onRestart)方法来恢复
36、或重新启动这些程序。当一个Activity被重现可见时,onRestart方法优先于onStart被调用,使用它可以实现一些Activity重新可见时的特殊的处理。OnStart / OnStop方法也被用来注册和注销BroadercastReceiver。Activity活跃的生命周期一个Activity活跃的生命周期始于OnResume调用,结束于OnPause调用。一个活跃的Activity总是在前台并且接收用户的输入事件。当一个新的Activity启动,或该设备进入休眠状态,或失去焦点,Activity活跃的生命周期就结束了。尽量在onPause和onResume方法中执行简洁的代码以
37、确保应用程序能够快速响应Activity在前台和后台之间切换。在调用onPause之前,onSaveInstanceState会被调用。这个方法提供了一个机会保存当前的UI状态到Bundle当中。 Bundle信息将会被传递到OnCreate和onRestoreInstanceState方法。使用onSaveInstanceState保存 UI状态(如检查按钮状态,用户焦点,未提交用户输入)能够确保当Activity下次被激活时能呈现和目前相同的用户界面。下面图2-8给出了activity生命周期中可能经历的状态变化。图2-8 activity生命周期中可能经历的状态变化2.4 资源Andro
38、id资源是应用程序的资产(包括图像、本地化字符串、XML布局等),资源是外部文件(不含代码的文件),它被代码使用并在编译时编入应用程序。看看第一个例子HelloAndroid源代码目录,有一个是res的目录,它存放的就是应用程序需要的各种资源。2.4.1 创建、管理资源Android支持不同类型的资源文件,包括XML,PNG以及JPEG文件。每个对象语法、格式以及它们存储位置的支持,都是取决于不同类型的对象。通常,可以通过三种类型的文件来创建资源:XML文件(除位图以及原数据文件)、位图文件(对于图片)以及原始数据(其他类型,例如声音文件等)。事实上,有两种不同类型的XML文件,一种是编译到包
39、里的,另一种是通过aapt来产生的资源文件,下面是包含所有资源类型,文件格式、文件描述以及所有XML文件的详细信息的列表。表2-2 资源类型列表目录资源类型res/anim/XML文件,它们被编译进逐帧动画( HYPERLINK /guide/topics/resources/available-resources.html l animationdrawable t _blank frame by frame animation)或补间动画( HYPERLINK /guide/topics/resources/available-resources.html l tweenedanimati
40、on t _blank tweened animation)对象res/drawable/.png、.9.png、.jpg格式的图片文件res/layout/被编译为屏幕布局(或屏幕的一部分)的XML文件res/values/可以被编译成很多种类型的资源的XML文件。尽管这个文件夹里的文件可以任意命名,不过下面是一些比较典型的文件(文件命名的惯例是将元素类型包含在该名称之中):array.xml定义数组colors.xml定义 HYPERLINK /android/reference/available-resources.html l colordrawableresources t _bl
41、ank color drawable和 HYPERLINK /android/devel/resources-i18n.html l colorvals t _blank 颜色的字符串值(color string values)。使用Resource.getDrawable()和Resources.getColor()分别获得这些资源。dimens.xml定义 HYPERLINK /android/reference/available-resources.html l dimension t _blank 尺寸值(dimension value)。使用Resources.getDimensi
42、on()获得这些资源。strings.xml定义 HYPERLINK /android/reference/available-resources.html l stringresources t _blank 字符串(string)值。使用Resources.getString()或者Resources.getText()获取这些资源。getText()会保留在UI字符串上应用的丰富的文本样式。styles.xml定义 HYPERLINK /android/reference/available-resources.html l stylesandthemes t _blank 样式(sty
43、le)对象。res/xml/任意的XML文件,在运行时可以通过调用 HYPERLINK /android/reference/android/content/Resources.html l getXml%28int%29 t _blank Resources.getXML()读取。res/raw/直接复制到设备中的任意文件。res/assets/要使用这些资源,可以调用 HYPERLINK /android/reference/android/content/Resources.html l openRawResource%28int%29 t _blank Resources.openRa
44、wResource(),参数是资源的ID,即R.raw.somefilename。assets下也可以放置任意文件,使用 Activity.this.getAssets().open(*.txt);打开。资源最终会被编译成.apk文件,Android创建一个封装类,命名为R,这样开发者可以在代码里使用这些资源类。2.4.2 使用资源使用资源包括三种方法:在代码里使用资源类;在代码中调用资源并实例化;从其他资源类里引用,这样可以重用通用资源。上一节提到的R类,它指向应用程序中所有的资源。这个类包含很多子类。每一种都是Android支持的,同时在编译后会产生一个资源文件。每个类提供一个或多个编译资
45、源的标识符,开发者可以在代码中使用这些标识符。注意:这个R类是自动产生的,不能通过手工编写。当资源变化时,它会自动更新。2.4.3资源的创建管理和使用。1.创建一名称为“resourcedemo”的工程,创建完工程后,在Eclipse中定位至/res/values/strings.xml文件,双击编辑它。代码如下: Hello resourcedemo 资源创建的例子其中:资源创建的例子是自己添加的资源。2.保存Strings.xml文件。Eclipse插件将自动在工程中生成R.java文件,并含有适当的资源ID,以供编译之后使用程序访问这些资源。定位到/gen/目录下的R.java文件,你可
46、以看到如下代码:package com.resource;public final class R public static final class attr public static final class drawable public static final int icon=0 x7f020000; public static final class layout public static final int main=0 x7f030000; public static final class string public static final int app_name=0
47、 x7f040001; public static final int example=0 x7f040002; public static final int hello=0 x7f040000; 3. 创建好资源并保存后,可以在程序使用资源。定位到/res/layout/main.xml,双击编辑代码,如下所示:其中android:text=string/example是添加的新代码,意思是定义text的内容为string类别下的资源,名字叫做example,内容为“资源创建的例子”。4.运行程序,结果如下图所示:图2-12 资源创建并使用的运行结果2.5 AndroidManifest.
48、xml 文件2.5.1 AndroidManifest.xml 的文件组织结构 每个Android的application都必须包含一个AndroidManifest.xml,且文件名是固定的,不能修改。应用程序需要通过它向Android系统提供一些必需的信息,且需要在application运行前提供给系统,如下图2-13所示:图2-13 Android应用程序的组件AndroidManifest.xml主要包含以下功能:说明application的java 数据包,数据包名是application的唯一标识;描述application的component;说明application的comp
49、onent运行在哪个process下;声明application所必须具备的权限,用以访问受保护的部分API,以及与其他application的交互;声明application其他的必备权限,用以component之间的交互;列举application运行时需要的环境配置信息,这些声明信息只在程序开发和测试时存在,发布前将被删除;声明application所需要的Android API的最低版本级别,比如1.0,1.1,1.5;列举application所需要链接的库。AndroidManifest.xml的结构和规则:元素:在所有的元素中只有和是必需的,且只能出现一次。如果一个元素包含有其他
50、子元素,必须通过子元素的属性来设置其值。处于同一层次的元素,这些元素的说明是没有顺序的。属性:按照常理,所有的属性都是可选的,但是有些属性是必须设置的。那些真正可选的属性,即使不存在,其也有默认的数值项说明。除了根元素的属性,所有其他元素属性的名字都是以android:为前缀的。定义类名:所有的元素名都对应其在SDK中的类名,如果你自己定义类名,必须包含类的数据包名,如果类与application处于同一数据包中,可以直接简写为“.”。多数值项:如果某个元素有超过一个数值,这个元素必须通过重复的方式来说明其某个属性具有多个数值项,且不能将多个数值项一次性说明在一个属性中。资源项说明:当需要引用
51、某个资源时,其采用如下格式:package:type:name。例如 。字符串值:类似于其他语言,如果字符中包含有字符“”,则必须使用转义字符“”。2.5.2 在AndroidManifest.xml 中声明权限 权限声明在智能手机中是一种比较常见的应用程序保护机制,其基本思想是通过AndroidManifest.xml文件中显式地声明应用程序需要的权限,防止应用程序错误地使用服务,不恰当访问资源,最终达到提高Android应用程序的健壮性,改善用户体验的目的。 Android中每种权限都用一个独立的标签表示,如:android.permission.SEND_SMS,android.perm
52、ission.CALL_PHONE。如果需要使用发短信的权限,应使用如下标签:。Android系统定义的所有权限可以在类Manifest.permission中找到。需要注意的是,在Manifest.permission类中表示发短信权限的变量是SEND_SMS,用户在AndroidManifest.xml中声明使用权限是应在SEND_SMS前加上前缀android.permission。除了Android自带的权限以外,应用程序还可以对自己的组件进行权限声明,以保护其他应用程序不乱用自己的组件。声明本组件被其他组件调用时的权限,使用如下标签:。2.5.3通过helloWord程序认知Andr
53、oidManifest.xml文件。在第一章我们编写了一个简单的Android程序Hello Android。我们按照建立这个应用程序的步骤再建立一个程序HelloWorld,几乎一模一样,就是名称变了。具体步骤参考第一章。项目建立完可以看到如下目录结构,其中有AndroidManifest.xml文件。图2-14 HelloWorld项目的目录结构下面是AndroidManifest.xml文件的代码: 代码解释:文件中,除去头部XML信息说明,首先是manifest项根节点,其属性包括:schemas URL地址、包名(moandroid.flashlight),以及程序的版本说明。其次是
54、manifest的子节点application,其属性包括:程序图标、程序名称。前面带有表示引用资源,例如:drawable/icon表示引用的是drawable资源中的icon,可以在其源工程的res/drawable中找到。然后就是application的子节点activity,其属性包括:activity的名称、activity的标签名,其子节点intent-filter则是对activity的说明。而在intent-filter中,action android:name=”ent.action.MAIN”和category android:name=”ent.category.LAUN
55、CHER”用以说明程序启动时的入口activity是哪个。如果这两个属性值中分别含有MAIN和LAUNCHER,则说明它就是启动程序时的入口活动。uses-sdk android:minSdkVersion=”2说明程序使用的Android SDK的最低版本,其中1表示Android 1.0,2表示Android 1.1,而3则表示Android 1.5。在Eclipse中创建工程后,会自动生成一个AndroidManifest.xml文件。在代码编写的过程中,需要同时修改AndroidManifest.xml,如果配置出现错误会导致程序不能正常运行。其他更为详细的元素、属性以及值的说明,可查
56、阅Android SDK开发指南中的详细内容。第3章 Android用户界面教学要点:各种用户界面的控件的使用方法。界面布局的特点和使用方法。菜单的使用方法。按键事件和触摸事件的处理教学时数: 6学时教学内容:3.1 用户界面基础用户界面(User Interface,UI)是系统和用户之间进行信息交互的桥梁。在Android中的用户界面通常采用两种方式来创建:一种是编写XML代码文件;另外一种是直接在源代码文件中编写控件语句。Android用户界面框架中的界面元素主要有View类对象和ViewGroup类对象两种。讲解视图树。3.2 界面控件在Android系的Widget包中提供了诸如文本
57、框 (Textview),按钮(Button),图像按钮(ImageButton),列表 (List),编辑框 (EditText),单选按钮(RadioButton),复选按钮(CheckBox),下拉列表(Spinner )等一系列已经封装好的界面控件和功能控件。3.2.1 TextView 与EditTextTextView是一种用来显示文本标签的控件,EditText是一种用来输入和编辑文本的控件。通过程序案例代码,以xml方式给出了TextView 与EditText的使用方法。3.1.2 Botton和ImageButton一种是普通的按钮(Button),另外一种能够显示图像的按
58、钮(ImageButton)。通过在例题LX3_1中添加Button和ImageButton后的工程LX3_2来了解一下两种按钮的使用。详见案例LX3_2。3.1.3 CheckBox和RadioButtonAndroid系统中提供了单项选择的控件RadioButton和多项选择的控件CheckBox。RadioButton控件由选项文本和选项圆点组成,在定义多个单项选项时,由RadioButton和RadioGroup组合起来共同完成。CheckBox控件由选项文本和选项方框组成,在使用时,可以实现同时选择多项的功能。3.1.4 SpinnerSpinner是一种下拉列表形式的,能够从多个选
59、项中选择一个选项的控件。通常与包含选项内容的ArrayAdapter适配器对象相结合。3.1.5 ListViewListView是一种在屏幕上显示选项的列表控件,通过适配器将显示数据选项和自身绑定,选项过多超出显示区域的范围时,会出现垂直滚动条。3.1.6 TabHostTab标签页是一种可以实现多个分页之间的快速切换,每个分页显示不同内容的控件。使用Tab组件的步骤说明如下。1.在布局文件中使用FrameLayout列出Tab组件及Tab中的内容组件。2.Activity要继承TabActivity。3.调用TabActivity的getTabHost()方法获得TabHost对象。4.通
60、过TabHos创建Tab选项。3.3界面布局3.3.1 线性布局线性布局(LinearLayout)是一种比较常用且简单的布局方式。在这种布局中,所有的子元素都是按照垂直或水平的顺序排列在界面上。如果是垂直排列,每个子元素占一行,如果是水平排列,则每个子元素占一列。线性布局可以支持布局样式嵌套实现复杂的布局样式。通过新建工程LX3_7来掌握线性布局的使用方法以及属性设置。3.3.2 表格布局表格布局(TableLayout)是一种把屏幕区域划分成网格形式的布局方式,可以指定划分的行和列数。在每一个方格里添加一个控件。在定义这种布局时通常与TableRow配合使用。TableRow表示表格行。通
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 设备改造水闸施工方案(3篇)
- 输血发热的应急预案(3篇)
- 酚醛保温维修施工方案(3篇)
- 镜面玻璃安装施工方案(3篇)
- 面层喷护施工方案(3篇)
- 烟草技术就业方向
- 职业规划师的学科选择
- 纪律审查应对预案
- 棉花加工工发展趋势测试考核试卷含答案
- 预拌混凝土中控工创新实践测试考核试卷含答案
- 第六单元 专题学习活动 以和为贵 新教材八年级语文下册
- 2025年中国邮政集团有限公司云南省分公司第一期见习人员477人笔试历年参考题库附带答案详解
- 国家事业单位招聘2025文化和旅游部艺术发展中心应届毕业生招聘笔试历年参考题库典型考点附带答案详解
- 2026年国企采购管理综合知识题库及答案
- 2026年上海市青浦区高三下学期二模数学试卷和答案
- alc条板墙板安装技术交底
- 甘肃省天水市初二学业水平地理生物会考真题试卷+解析及答案
- 费用报销邮件审批制度
- 《危险化学品目录》(2026版)
- 初中八年级数学课件-一次函数的图象与性质【全国一等奖】
- GB/T 7969-2023电缆用纸
评论
0/150
提交评论