4 计算器系统实现
4.1 Android应用程序构成
Android应用程序一般是由Activity、Serviece、Content Provider、Intent、Intent Receiver、Notification六个组件构成。但并非每一个Android应用程序都包含这六个组件。
(1)Activity(活动):应用程序的表示层。Activity是Android的基本组件。每一个activity代表一个单独的屏幕。每一个activity都是继承于Activity的独立类。这个activity类将会显示出几个Views控件组成的用户接口,并对事件作出响应。Android使用了Intent,实现在屏幕与屏幕之间跳转。Activity跳转时只需要调用startActivity(Intent myIntent)方法。然后,系统会在所有安装的应用程序中定义的IntentFilter中查找,找到最匹配myIntent的Intent对应的activity。新的activity接收到myIntent的通知后,开始启动运行。当startActivity方法被调用将触发解析myIntent的动作,这个机制提供了两个关键的好处:能够重复利用从其他组件中以Intent的形式产生的一个请求和可以在任何时候被一个具有相同IntentFilter的新的startActivity取代。
(2)Service(服务):Android应用程序的后台运行组件。Service没有用户界面的程序。服务组件在后台运行,它们可以更新数据源和可见的Activity,并触发Notification。它们被用来执行一些需要在后台持续的常规处理。例如媒体播放器这个activity会使用Context. startService()方法,连接到一个service上(如果这个service还没有运行将启动它)。当连接到一个service之后,我们还可以通过service提供的接口与它进行通讯。
(3)Content Provider(内容提供器):用来管理和分享应用程序数据库。Content Provider是在应用程序之间共享数据的首选方法。通过配置Content Provider允许其他应
18
用程序访问存储的数据,也可以使用其他应用程序提供的Content Provider来访问它们存储的数据。Android平台也提供了系统自带的Content Provider,如联系人信息等。
(4)Intent(意向):Activity之间的粘合剂。使用Intent,可以在系统范围内向目标活动或者服务广播消息,说明希望执行某个动作的意图。之后系统就会确定那些最适合执行动作的目标。
(5)Intent Receiver(意向接收器):通过Intent Receiver实现应用能够对一个外部的事件作出响应,Intent Receiver在AndroidManifest.xml中注册,但也可以在代码中使用Context.registerReceiver()进行注册。当一个intent receive被触发时,应用不必对请求调用intent receive,系统会在需要的时候启动你的应用。各种应用还可以通过使用Context.broadcastIntent()将它们自己的intent receive广播给其他应用程序。
(6)Notification(通知):一种用户通知框架。通过允许向用户发送信号,而不会过分吸引他们的注意力或者打断他们当前的活动。它们是服务或者广播接收器吸引用户注意的首选方法。例如,当设备接收到一个文本消息或者来电的时候,它可以通过闪灯、发出声音、显示图标或则会显示对话框信息的方式提示用户。
4.2 Android应用系统文件结构
本文是基于Android平台的开发,采用的开发语言为JAVA。Eclipse是开源的开发工具,具有强大的功能及良好的用户界面,深受广大开发者喜爱本文采用了Eclipse+Android SDK2.1开发环境。在Eclipse建立计算器的Android项目工程,计算器的工程文件名为jisuanqi2。然后加你存放源文件、资源文件、页面文件等各个文件夹。整个工程项目的目录结构如图4-2所示。
19
图4-1项目的目录结构图
其中src和gen文件夹下是整个项目的源文件,所有的java代码都在这两个文件夹下。src文件夹存放的是本文中开发的所有java文件。这java文件是整个项目的代码。gen下面的R.java文件为Eclipse自动生成的系统文件,此文件中包含了本文开发过程中所吸引的资源的标示。
res是存放整个系统中所用到的所有资源,此文件夹包含五个文件夹。分别为anim、drawble、layout、values、values-zh-rCN。其中anim文件夹下存放的是界面动画效果。Drawble文件夹存放的是本文开发过程中所用到的所有图片。Drawble包括drawable-hdpi,drawable-ldpi,drawable-mdpi三个文件夹,这是Adroid2.1版本的改进,是为了适应Android手机系统不同的屏幕大小而设计的。用高分辨率的屏幕时,页面所需要的图片在drawable-hdpi中,用地分辨率的屏幕时,则采用drawable-ldpi文件夹下的资源图片;而
20
普通分辨率时采用drawable-mdpi文件夹下的图片资源。因此这种设计具有很好的版本适应性及兼容性,大大提高了用户体验。
AndroidManifest.xml是每个Android程序中所必需的,它位于Android工程的根目录,描述了package中的全局数据,包括package中的组件,各自的实现类,各种能被处理的类和启动位置等。Manifest文件的主要功能是声明应用程序的组件。例如,一个activitiy必须要有一个标志对应,无论它是供应外部使用还是只用于自己的package中。如果一个Activity没有对应的标记,他将不能被运行。
上述两个语句就是Activity声明。Name属性指定了实现这Activity的Activity子类。Label属性值指向此Activity要展示给用户的标签资源。注意:几乎所有的AndroidManifest.xml文件都会在第一个元素中包含一个命名空间的声明
xmlns:android=http://schemas.android.com/apk/res/android该声明使标准
Android属性在文件中可用。这些属性为文件中的xml元素提供了大部分数据。
Layout文件夹下面存放了本文所用到的所有用户界面的XML布局文件。这些用户界面资源文件定义后系统会在gen文件夹下的R.java文件中生成对应的资源引用符号。当系统调用生成用户界面时,只需要引用对应的引用符号即可。
Values文件夹下存放的是本系统所用到的文字及数字资源,这些资源以键值得形式存放。如
4.3 构建Android应用程序用户界面
4.3.1 Android应用程序界面组件
Android应用程序的基础功能单元是Activity。它是android.app.Activity类中的一个对象。一个Activity可以实现很多功能,但是它自己并不会显示到屏幕上。Android应用程序界面需要使用view和viewgroup一起构造。
21
Android.view.View:基础类的对象。它是一个用来存储屏幕上特定的一个矩形内布局和内容属性的数据结构。一个View对象处理测距和布局、绘图、焦点交换、滚动条,还有屏幕区域自己表现的按键和手势。View类作为一个基类,为widget(窗体部件)服务,widget是一组用于绘制交互屏幕元素的完全实现子类。Widget处理它们自己的测距和绘图,可以快速的使用它们去构建Android应用程序界面。可用到的widget包括TextView,EditText,InputMethod,Botton,RadioButton,Checkbox和ScrollView等。
Android.view.ViewGroup:一个ViewGroup是一个Android.view.ViewGroup类对象。ViewGroup是一个特殊的view对象,它可以装载和管理一组下层的view其他viewgroup。ViewGroup类作为一个基类,为layout(布局)服务,layout是一组提供屏幕界面通用类型的完全实现子类。Layout可以为一组view构建一个结构。
在Android平台上,用view树和viewgroup节点来定义一个Activity的用户界面,如下图所示。这个树形结构可以构建各种Android程序界面,并且可以使用Android的预定义widget和layout或者自定义的view类型来构建。Android树形用户界面如图4-1所示。
图4-2Android树形界面
所有的viewgroup都包括宽和高。很多还包括边界的定义(margin和border)。可以非常精确地描述宽和高,同时view可以自行调整到适应内容大小,或者适应容器大小。
4.3.2 Android应用系统界面组件
基于Android的手机计算器,是以用户为中心的。因此构建良好的用户界面是很重要的。Android构建用户界面有以下三种方式:
(1)用户界面通过XML配置文件生成。
22