在Eclipse中,一个基本的Android项目的目录结构如图2-20所示。
图2-20 Android应用工程文件的组成 1. src目录——程序文件 在里面保存了程序员辛辛苦苦直接编写的程序文件。和一般的Java项目一样,src目录下保存的是项目的所有包及源文件(.java),res目录下包含了项目中的所有资源。例如,程序图标(drawable)、布局文件(layout)和常量(values)等。不同的是,在Java项目中没有gen目录,也没有每个Android项目都必须有的AndroidManifest.xml文件。 .java格式的文件是在建立项目时自动生成的,这个文件是只读模式,不能更改。R.java文件是定义该项目所有资源的索引文件。先来看看HelloAndroid项目的R.java文件,代码如下所示。 package com.yarin.Android.HelloAndroid; public final class R { public static final class attr { } public static final class drawable { public static final int icon=0x7f020000; } public static final class layout { public static final int main=0x7f030000; } public static final class string { public static final int app_name=0x7f040001; public static final int hello=0x7f040000; } } 在上述代码中定义了很多常量,并且会发现这些常量的名字都与res文件夹中的文件名相同,这再次证明.java文件中所存储的是该项目所有资源的索引。有了这个文件,在程序中使用资源将变得更加方便,可以很快地找到要使用的资源。由于这个文件不能被手动编辑,所以当在项目中加入新的资源时,只需刷新一下该项目,.java文件便自动生成了所有资源的索引。 2. AndroidManifest.xml文件——设置文件 AndroidManifest.xml是一个控制文件,在里面包含了该项目中所使用的Activity、Service、Receiver,看下面“HelloAndroid”项目中的AndroidManifest.xml文件。 < ?xml version="1.0" encoding="utf-8"?> < manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.yarin.Android.HelloAndroid" android:versionCode="1" android:versionName="1.0"> <application android:icon="@drawable/icon" android:label="@string/app_name"> <activity android:name=".HelloAndroid" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> <uses-sdk android:minSdkVersion="5" /> < /manifest> 在上述代码中,intent-filter描述了Activity启动的位置和时间。每当一个Activity(或者操作系统)要执行一个操作时,它将创建出一个Intent的对象,这个Intent对象能承载的信息可描述你想做什么、你想处理什么数据、数据的类型以及一些其他信息。而Android则会和每个Application所暴露的intent-filter的数据进行比较,找到最合适的Activity来处理调用者所指定的数据和操作。下面来仔细分析AndroidManifest.xml文件,如表2-1所示。 表2-1 AndroidManifest.xml分析
参数 | 说明 |
manifest | 根节点,描述了package中所有的内容 |
xmlns:android | 包含命名空间的声明。xmlns:android=http://schemas.android.com/apk/res/android,使得Android中各种标准属性能在文件中使用,提供了大部分元素中的数据 |
(续表)
参数 | 说明 |
package | 声明应用程序包 |
application | 包含package中application级别组件声明的根节点。此元素也可包含application的一些全局和默认的属性,如标签、icon、主题、必要的权限,等等。一个manifest能包含零个或一个此元素(不能大于一个) |
android:icon | 应用程序图标 |
android:label | 应用程序名字 |
activity | 用来与用户交互的主要工具。Activity是用户打开一个应用程序的初始页面,大部分被使用到的其他页面也由不同的<activity>所实现,并声明在另外的<activity>标记中。注意,每一个Activity必须有一个<activity>标记对应,无论它给外部使用或是只用于自己的package中。如果一个Activity没有对应的标记,你将不能运行它。另外,为了支持运行时查找Activity,可包含一个或多个<intent-filter>元素来描述Activity所支持的操作 |
android:name | 应用程序默认启动的Activity |
intent-filter | 声明了指定的一组组件支持的Intent值,从而形成了Intent Filter。除了能在此元素下指定不同类型的值,属性也能放在这里来描述一个操作所需的唯一的标签、icon和其他信息 |
action | 组件支持的Intent action |
category | 组件支持的Intent Category。这里指定了应用程序默认启动的Activity |
uses-sdk | 该应用程序所使用的sdk相关版本 |
3. 常量的定义文件——露脸的文件 下面看看资源文件中一些常量的定义,如String.xml,例如下面的代码。 < ?xml version="1.0" encoding="utf-8"?> < resources> <string name="hello">Hello World, HelloAndroid!</string> <string name="app_name">HelloAndroid</string> < /resources> 上述代码很简单,就定义了两个字符串资源,请不要小看上面的几行代码。它们的内容很“露脸”,里面的字符直接显示在手机屏幕中,就像动态网站中的HTML一样。 在Android中还有一个露脸的文件,那就是布局(layout)文件,这个文件一般为“res\layout\main.xml”。虽然里面的字符没有“露脸”,但是里面的代码能够生成一个显示界面,这个可以显示人名和图片的界面“露脸”了。例如下面的代码。 < ?xml version="1.0" encoding="utf-8"?> < LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > < TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/hello" /> < /LinearLayout> 在上述代码中,有以下几个布局和参数。 Ÿ <LinearLayout></LinearLayout>:线性版面配置,在这个标签中,所有元件都是按由上到下的顺序排成的。 Ÿ android:orientation:表示这个介质的版面配置方式是从上到下垂直地排列其内部的视图。 Ÿ android:layout_width:定义当前视图在屏幕上所占的宽度,fill_parent即填充整个屏幕。 Ÿ android:layout_height:定义当前视图在屏幕上所占的高度,fill_parent即填充整个屏幕。 Ÿ wrap_content:随着文字栏位的不同而改变这个视图的宽度或高度。 在上述布局代码中,使用了一个TextView来配置文本标签Widget(构件),其中设置的属性android:layout_width为整个屏幕的宽度,android:layout_height可以根据文字来改变高度,而android:text则设置了这个TextView要显示的文字内容,这里引用了@string中的hello字符串,即String.xml文件中的hello所代表的字符串资源。hello字符串的内容“Hello World, HelloAndroid!”这就是在HelloAndroid项目运行时看到的字符串。 注意:上面介绍的文件只是主要文件,在项目中需要自行编写。在项目中还有很多其他文件,那些文件很少需要编写,所以在此就不进行讲解了