山东大学学士学位论文
第四章 应用程序的编程实现
4.1 Android应用工程文件组成
Android应用工程文件(如图5所示)主要由以下工程文件组成: 1.src既源文件目录。
2.gen目录,包含R.java文件,它由Eclipse自动生成和修改,不需要去维护。 3.android库。
4.assets目录,存放多媒体等文件。 5.res目录,存放应用用到的资源文件。
6.drawable目录,存放图片资源,分别为高中低三个分辨率。 7.layout目录,放置布局文件,均为.xml文件。
8.values目录,放置字符串(string.xml),颜色(colors.xml),数组(arrays.xml)。
9.AndroidManifest.xml.相当于应用的配置文件,我们要在这个文件中声明应用的名称,所有的Activity,Service,Reciver等。
图5 工程文件目录
11
山东大学学士学位论文
4.2 Android应用程序组成
一个典型的Android应用程序通常由5个组件组成,即Activity、Intent and Intent Filters、Service、BroadcastIntentReceiver、ContentProvider。
Activity是这5个组件中最常用的,程序中Activity通常的表现形式是一个单独的界面。每个Activity都是一个单独的类,它扩展实现了Activity基础类。这个类显示为一个由Views组成的用户界面,并响应事件。大多数程序有多个Activity。
另一个比较常用的类就是Intent and Intent Filters。Android通过一个专门的Intent类来进行界面的切换,Intent描述了程序想做什么。有个相关的类叫IntentFilter。Intent是一个请求来做什么事情;IntentFilter则描述了一个Activity(或下文的IntentReceiver)能处理什么意图。系统通过解析传递进来的Intent来完成Activity的切换。使用startActivity()方法来启用新的Activity。
4.3 Intent的使用
Intent是一个对象,它可以解决Activity之间的相互跳转、相互传递数据。解决了Android应用的各项组件之间的通讯。Intent负责对应用中一次操作的动作、动作涉及数据、附加数据进行描述,Android则根据此Intent的描述,负责找到对应的组件,将 Intent传递给调用的组件,并完成组件的调用[14]。 一个Intent对象包括一组信息,主要的包括:
1.Component name,它决定从一个Activity究竟启动哪个组件;
2.Action,决定了启动另一个Activity后,传递进入一个Intent方法进来,然后这个Activity要做的动作;
3.Data,是从一个Activity想向另一个Activity传递的数据。
4.Extras,是额外的一些信息,即键值对。可以在一个Activity中存放键值对,然后通过Intent对象在另一个Activity中将这个键值对取出来。
在多个Activity的跳转过程中,Intent起到了非常重要的作用。要想实现从Activity1跳转到Activity2,就要调用Activity1的startActivity()方法传递一个intent对象进来,而究竟跳转到哪个Activity,又将有什么动作,主要是由intent对象决定。
使用Intent实现Activity1跳转到Activity2的主要代码如下: ??
Intent intent=new Intent();
intent.setClass(Activity1.this,Activity2.class);
12
山东大学学士学位论文
startActivity(intent); ??
使用Intent将Activity1中的键值对传递进入Activity2的主要代码如下: 在Activity1中编写有关代码 ??
Intent intent=new Intent(); intent.putExtra(name,value);
intent.setClass(Activity1.this,Activity2.class); startActivity(intent); ??
在Activity2中调用getIntent()方法得到传递进入Activity2的intent ??
Intent intent=getIntent(); ??
4.4 调用ZXing
第一章已经讲过android众多优点中的一个,就是Android提供了一种机制,可以通过Intent复用多个应用的界面,可以无缝结合优秀的Google服务。比如可以在自己的应用中调用条形码识别程序,然后返回条形码的结果。不过呢,这需要系统必须事先在手机上安装ZXing的条码扫描工具。
ZXing是一个开放源码的,用Java实现的多种格式的1D/2D条码图像处理库,它包含了联系到其他语言的端口,可实现的条形码编码和解码。Zxing提供了程序的核心代码、适用于J2SE客户端的程序、适用于Android客户端的程序(即BarcodeScanner),而且通过Intent支持Android程序和BarcodeScanner的集成。ZXing提供了一个集成API,使用者可以通过这个集成API调用ZXing的相应Activity。
本项目就是利用了Zxing提供的BarcodeScanner,以及ZXing通过Intent支持app和BarcodeScanner集成的特点。当项目需要生产或者扫描二维码的时候,Activity通过Intent调用BarcodeScanner中的相应的方法,就能实现相应的功能,调用结束后,然后再讲结果返回到相应的Activity。通过Intent传递数据和信息的主要代码见下文4.5.3。
13
山东大学学士学位论文
4.5 编程实现
4.5.1 编写配置文件
本项目用到了3个Activity。在AndroidManifest.xml注册如下:
android:icon=\ android:label=\ >
android:label=\ android:name=\ >
android:label=\ android:name=\ >
android:label=\ android:name=\ >
其中打开应用程序,首先进入的Activity是含有以下语句的Activity。
14
山东大学学士学位论文
4.5.2 编写布局文件
布局文件,即为res文件夹中的layout文件。Android平台定义了线性布局、相对布局、绝对布局、框布局和表格布局这五种布局类型。在本项目的三个Activity中,我们选择使用线性布局。线性布局就是将容器内的子组件按照直线进行摆放的一种方式。通过布局文件,我们摆放了各个Activity中的各个组件,并且设置好了组件的长、宽、内容等属性。
一个完整的布局文件如下:
xmlns:android=\ android:layout_width=\ android:layout_height=\ android:orientation=\ > android:id=\ android:layout_width=\ android:layout_height=\ android:textSize=\ android:text=\/>
上面这个完整的布局文件就是Acitivity1的布局文件,它用到了TextView和Button这两种组件。对组件的属性设置如下:
android:id=\这句话可以在R文件中自动生成TextView的id,当我们引用这个Textview时,我们只需要引用R中生成的那个id。
android:layout_width=\定义了组件的宽度是占满整个屏幕。 android:layout_height=\定义了组件的高度随着内部文字变化。 android:textSize=\\定义了TextView内文字的大小。
android:text=\定义了TextView中的文字内容。在此,文字内容存放在一个字符串中。这个字符串资源存放在values文件夹下的strings
15