android helloworld程序
1、单击菜单 File > New > Project 弹出的窗口选择创建一个新的 Android 项目。
在安装好的Eclipse插件的新建项目,如图所示:
2、并在创建 Android 项目的对话框里填写项目的详细信息,确认无误后按下 finish 按钮一个工程就被顺利的创建成功了。
项目结构图示 :
简单介绍一下几个比较重要的目录。
(1)src 目录用于存放代码。
(2)gen 目录用于存放对应该资源文件的代码。
(3)res 目录用于存放资源文件。
(4)res\layout 目录用于存放布局描述文件。
(5)res\values 目录用于存放常量定义文件。
src里cn.wangmeng.test下有一个helloworld,他的名字就来自于我们新建项目的时候填写的Acivity name, 这个HelloWorld就继承自Activity(Android Framework里面最重要的一个类,详细信息可以参考 -> (Activity ), 我们简单地理解为它是一个UI的容器,直接跟用户打交道最前端的类。 还有一个R.java,这个类是系统根据res文件夹中的内容自动为你生成的,我们先讲一下res文件夹,res是resources的缩写,顾名思义,你程序中所需要的文字,图片,布局文件等等资源都是放在这个文件夹下面的,你现在看到这个文件夹下面有
drawable - 这个是放图片的
layout - 这个是放布局文件的
values - 下面放字符串(strings.xml ) 最后是AndroidManifest.xml. 你每次添加一个Acivity都需要在这个文件中描述一下,整个项目的结构都由这个文件控制。 布局是由XML控制的,内容如下:
最后运行结果如下:
Run As Android Application,点击右侧的Home键,进入主界面,点击主界面中间的按钮,出现应用列表,运行Hello, Android应用即可。(请耐心等候运行结果,时间会比较长)
PS:
Android工程结构
src:源代码,我们的代码。
gen:Android开发工具所生成的文件,我们不能编辑这个文件。
R.java,标识程序中使用的各种资源。没有被此文件标识的资源,不会被打包到APK文件中。
assets:应用系统需要使用到的文件,比如mp3、视频...。这些文件会被原样打包到APK中。
res:资源目录,向此目录添加资源时,会被R.java自动记录。
drawabel-?dpi:图标文件(*.png、*.jpg)
layout:界面布局文件(main.xml)与WEB应用中的HTML类同
values:软件上所需要显示的各种文字。可以存放多个*.xml文件,还可以存放不同类型的数据。比如arrays.xml、colors.xml、dimens.xml、styles.xml...。
AndroidManifest.xml:项目的总配置文件,记录应用中所使用的各种组件。如果应用中使用到手机中的功能,需要在此声明使用权限。
default.properties:记录项目中所需要的环境信息,比如Android的版本等。
AndroidManfest.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值,从 而形成了IntentFilter。除了能在此元素下指 定不同类型的值,属性也能放在这里来描 述一个操作所需的唯一的标签、icon和其他信息 |
action |
组件支持的Intent action |
category |
组件支持的Intent Category。这里指定 了应用程序默认启动的activity |
uses-sdk |
该应用程序所使用的sdk版本相关 |
Android程序运行过程
程序的运行由主配置文件开始AndroidManifest.xml:
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.changcheng.android" android:versionCode="1" android:versionName="1.0"> <!-- @drawable/icon: @代表R.java drawable是R.java的静态内部类 icon是drawable的常量,指定图片资源的ID。 --> <application android:icon="@drawable/icon" android:label="@string/app_name"> <!-- .HelloWorld指向package="com.changcheng.android"下面的HelloWorld类。 我们可以在此添加子包.sub.xxxClass,但不能添加上级包。 --> <activity android:name=".HelloWorld" 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> <!-- 本程序使用AndoridSDK的最低版本 --> <uses-sdk android:minSdkVersion="7" /> </manifest> |
接下来从HelloWorld类开始:
package com.changcheng.android;
import android.app.Activity; import android.os.Bundle;
/** * 我们的HelloWorld类,继承自Activity类。 * */ public class HelloWorld extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { // 在此方法中完成界面的绘制 super.onCreate(savedInstanceState); // 显示R.java文件中的layout静态内部类的main常量。它指向mail.xml setContentView(R.layout.main); } } |
然后再我们再看看mail.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" > <!-- 文本视图控件 android:layout_width="fill_parent" ,它的父窗口是屏幕,所以宽度为整个屏幕。 android:layout_height="wrap_content" ,它的高度为它所包含的内容高度。如果内容中有一行,就是一行的高度。 android:text="@string/hello",它包含(显示)的文本内容,指向R.java中string静态内部类的常量hello所指向的文本资源ID,文本资源文件是strings.xml。 --> <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/hello" /> </LinearLayout> |
|
再看看Strings.xml:
<?xml version="1.0" encoding="utf-8"?> <resources> <string name="hello">HelloWorld,Hello World!</string> </resources> |
现在让我们看看掌管资源的主文件R.java:
package com.changcheng.android;
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; } } |
R.java文件中的所有资源ID全部是自动生成的,我们不可以手动编辑。当我们添加一个图片时,ADT插件,会以图片的名称为常量的名称,然后自动生成对应的资源ID。当我们向strings.xml中添加一个字符串时,ADT插件会以符串的名称为常量的名称,然后自动生成对应的资源ID。
R.java文件不需要我们手动编辑,我们只需要在需要使用到资源的地方引用这个文件里标识的资源即可!