第一印象,作为一个开发人员,我们对一个新的开发框架的第一印象通常是看他的”Hello,World!”程序有多简单。在Android中,实现起来是非常简单的。
实现Hello World需要几个步骤:
- 创建项目
- 设计用户界面
- 运行程序:Hello,Android
以下几节讨论更加详细的内容
- 通过(XML 布局)XML Layout更新用户界面
- 调试程序
- 不使用Eclipse创建项目
Let's jump in! 废话少说,马上开始。
创建项目
创建项目非常简单,Eclipse的插件使Adroid的开发变得异常轻松。首先你需要安装一个3.3或以上版本的eclipse(译注:其实3.2也是可以的),然后给Eclipse安装一个Android插件。安装好上面的内容后,我们就可以开始了。
首先,我们来一个总结来看看到底需要几步来完成我们的"Hello, World!"。
1. 通过Eclipse的 File > New > Project 菜单创建"Android Project"项目。
2. 在新Android 项目对话框中添加项目的详细信息
3. 修改自动生成代码模板来显示一些东西
上面3步已经足够了!接下来,让我们开始吧
1. 创建Android项目
在Eclipse中选择 File > New > Project 菜单项。如果你已经成功安装了Android 插件,你会在弹出的新项目对话框中看到一个叫做“Android”的条目,包含一个”Android Project”的项目
选中"Android Project",点击 Next进行入下一步。
2. 填写项目的相关信息
这个窗口里你需要填写一些项目的相关信息.请看图中的示例:
下面解释一下屏幕上的内容:
这是计算机中保存项目文件目录的名称。
这是和Java语言意义相同的包名(Package namespace)—你的源代码将属于这个包名。同时stub Activity也将据此生成。
你所给出的报名必须保证在你的应用中是唯一的;因为这个原因,包的命名遵循域名方式(domain-style)就显得非常重要了;在实例中我们使用"com.google.android"作为包名;你可以选择一个适合你自己的包名。
Android插件将根据这个名称来创建一个stub类。他是一个继承自Activity类的子类。Activity类似一个简单的可以运行和工作的类。它能够根据你的需要创建用户界面,当然了这不是必须的。
这是你应用程序的标题。
你可以通过选择"Use default location"这个复选框来项目文件的存储位置。
3.编辑自动生成的程序代码
Android插件执行完毕后将创建一个叫做HelloAndroid类,他的内容如下:
public class HelloAndroid extends Activity { /**在activity被创建后执行*/
@Override
public void onCreate(Bundle icicle)
{
super.onCreate(icicle);
setContentView(R.layout.main);
}
}
创建用户界面
创建好项目以后,我们要做的是在屏幕上显示一点文字。下面是完成后的代码,我们将逐行分析它:
public class HelloAndroid extends Activity {/**在activity被创建后执行*/
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
TextView tv = new TextView(this);
tv.setText("Hello, Android");
setContentView(tv);
}
}
在Android中,用户界面是由View来组成的。一个View就是一个drawable的对象,比如一个单选按钮,一个动画,或者(本例中)是一个文字标签。View子类型中用来显示文字 类是TextView。
下面演示如何构建一个TextView的实例
TextView tv = new TextView(this);
TextView构造函数中的参数类型是Context。Context类可以简单的理解为系统的句柄;他提供访问了诸如资源、数据库以及程序设置的服务。Activity类继承自Context。我们的HelloAndroid类继承自Activity类,他同时也继承了Context。正因为如此我们才能使用’this’这个参数来创建TextView。
上面我们已经创建了一个TextView,下面我们来让他显示些文字:
tv.setText("Hello, Android");
这里没有什么好说的。
我们已经创建了一个TextView并且告诉了他要显示什么,最后就是让他显示在屏幕上了,就像下面这样:
setContentView(tv);
setContentView()方法让系统知道哪个View是与Activity的界面有联系的。如果你的Activity没有执行这个方法,界面将什么都不会显示,系统只会显示空屏幕。我们的目的是要显示一些文字,所以我们在这个方法的参数中填上TextView。
这就是我们Android中的"Hello, World"了!接下来当然是看看如何运行它了。
运行程序:Hello, Android
Android提供的Eclipse插件使得运行我们的程序非常简单。选择Run > Open Run Dialog菜单;你会看到一个这样的对话框:
接下来,选中"Android Application"这一项。点击左上角按钮(文档图标上有个加号的那个)或者简单双击"Android Application"项。你会得到一个叫做"New_configuration" 新launcher。
选择一个更好的名字,比如"Hello, Android", 点击"Browse"按钮选择你的项目。(如果你现在打开了多个Android的项目,一定要确认你选择了正确的那个)。Android插件会自动的扫描你的项目来查找Activity 的子类,在"Activity:" 标签下面的下拉框中列出所有的选项。你的"Hello, Android" 只有一个,他将作为缺省的选项。
点击 "Apply" 按钮。示例如下:
大功告成!点击run按钮,Androi模拟器将运行。当模拟器启动完成你将看到你的程序。到这里我们就完成了。
这就是我们Android中 “Hello,World”。很简单吧,嗯?下面的章节我们会探讨一些比较深入的东西,对你学习Android肯定有所帮助。
通过XML Layout构造用户界面
你刚刚完成"Hello, World"时通过编程来创建用户界面的。也就是说你在你的程序代码中来创建界面。如果你以前做过很多的界面编程,你一定知道有个非常麻烦的事情:在一大段代码中找到并且修改一个小的界面变化是很头疼的。而且也容易忘记属性与视图之间的关系,从而导致错误,浪费大量的时间来调试代码。
这就是Android提供了一个替代创建用户界面的模式:基于XML的XML Layout文件。解释这个概念的最好方法就是创建一个例子。这个XML Layout文件实现了我们上面用程序代码实现的功能。
<?xml version="1.0" encoding="utf-8"?> <TextView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:text="Hello, Android" />
一般的Android XML Layout 文件 结构非常简单。它由树形的标记组成,每一个标记都是一个View类。在上面这个例子中只有一个元(element)-TextView。你可以在XML layout中使用任何一个继承自View的类,也包括你自己定义的类。这样简单的结构和语法使我们能够比使用代码更快的创建用户界面。它的灵感来自Web开发中用户界面与程序逻辑分开的模式。
这个例子中只有4个XML属性,下面列出含义:
android:layout_width
这个属性定义了使用宽度,磁力中使用最大可用宽度。
android:layout_height
同上,使用可用的屏幕高度
android:text
TextView显示的文字内容,这个例子中显示 "Hello, Android
这就是XML layout的内容,但是该将它放在那里呢?在项目的res/ 目录中。这个"res"是对"resources"的缩写,这个目录中存放项目中所有不是代码的资源或文件。包括:图片,本地字符串,XML layout文件。
Eclipse插件已经为我们创建了这些XML文件。在我们上面的例子中,我们根本没有使用过他们。在Package Explorer中展开res/layout,目录,修改其中的main.xml文件。使用上面的文本替换掉他的内容。现在从Package Explorer中的源代码文件夹中打开R.java文件,你将看到如下内容:
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=0x7f040000;
};
}
项目中的R.java文件是对文件中所有定义资源的索引。可以用最简单的方式在代码中使用项目中定义的资源。利用Eclipse的代码提示功能可以更快找到需要的内容。
其中最重要的两个内部类就是"layou"和"main"。Eclipse插件会根据你在XML layout文件中更改自动生成R.java文件。当时你在项目中添加了其他资源后你会先R.java会马上发生变化。
最后一件事就是你要修改你的HelloAndroid 代码,让程序使用XML layout文件定义的界面而不是采用我们以前的硬编码方式。看看现在的代码,简单多了:
public class HelloAndroid extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
setContentView(R.layout.main);
}
}
不要简单的拷贝粘贴来修改文件,试试R类的代码自动完成,这是你或许感觉到R类的作用了。
好,现在你已经完成了修改,让我们重新运行一下程序---你要做的就是点击以下有绿色箭头图标的Run按钮,或者选择Run>Run菜单来运行。你会看到和以前相同的结果。我们可以看出两种不同的布局方法结果是相同的。
我们只是对XML layouts有了个大概的了解,你需要阅读用户界面部分的完整文档来获取进一步的信息。
调试程序
Android的Eclipse的插件也能够完美的与Eclipse的调试器集成。为了证实这一点,我们来做一个简单的测试。将你HelloAndroid 程序的代码改成这样:
这段代码很明显将产生一个NullPointerException 异常。运行后你看到:
public class HelloAndroid extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
Object o = null;
o.toString();
setContentView(R.layout.main);
}
}
为了找出错误,我们在"Object o = null;"这一行设置一个断点(你可以通过双击eclipse编辑器行号左边的空余部分来创建)。选择 Run > Debug菜单进入到调试模式。你的程序在模拟器中重新启动,但是这次程序会在运行到断点的地方停住。就行你在其他开发工具中那样,你可以在Eclipse的Debug Perspective中检查代码。
不使用eclipse创建项目
如果你不使用Eclipse(比如其他IDE或者是使用简单的文本编辑器和命令行工具),那么Android的Eclipse插件就帮不了你了。但是别太担心--你不会因为不使用Eclipse而失去某些功能。
Android 插件实际上只是对SDK里面的工具做了一下封装。因此可以使用其他工具来封装这些工具,比如'ant'来编译文件。(像emulator, aapt, adb, ddms这些工具都可以在文档中找到使用的方法)
Android SDK 同时包含了一个名称为"activityCreator.py"的Python的程序脚本,用来创建项目中的代码和目录,以及一个兼容'ant'的build.xml文件。这使得你可以通过命令行或者使之与其他的IDE工具集成。
例如,创建一个想刚才我们在eclipse中创建的HelloAndroid 项目,你可以使用这样的命令:
activityCreator.py --out HelloAndroid com.google.android.hello.HelloAndroid
为了编译这个项目,你必须使用ant命令。当命令成功完成后,你可以在'bin'目录中找到一个HelloAndroid.apk文件。这个.apt文件就是一个Android 包,你可以使用'adb'工具把它安装到模拟器中。