第1章 Hello,World
作为一名开发者,我们学习一个平台的第一印象肯定都是写一个“Hello,World”。在Android上写一个“Hello,World”是很简单的,由于我们使用Eclipise IDE,它提供了ADT这么强大的插件,这样创建和管理一个项目就更简单了,可以大大缩短我们的时间。在开始之前,你应该确认你已经安装了SDK和ADT插件。本章会根据以下几个部分来讲述:
1. 安装一个平台(系统版本)
2. 创建一个Android虚拟机(AVD)
3. 创建一个项目
4. 构建一个用户界面
5. 执行代码
6. 升级界面为一个XML布局
7. 调试你的项目
1.1 安装一个平台(系统版本)
为了执行Hello World应用程序,你需要在你的SDK环境中安装至少一个Android平台版本。如果你已经安装了就可以跳过这一步,请注意根据你的实际情况下载最实用的平台版本,笔者自己下载的是1.6----2.1----2.2---2.3----3.0这五个版本的平台版本,请根据自己实际情况下载吧。如果你还没有下载过一个平台版本,在Eclpise请按照以下步骤执行:
1. 在Android SDK Manager 中,选择左边面板中的 Available Packages
2. 在右边面板,展开Android Repository列表显示一些可用的安装组件
3. 至少选择一个平台安装,点击Install Selected
1.2 创建一个Android虚拟机(AVD)
我们在第一大篇的开发入门中已经讲过,如何使用和管理AVD。在本章中,我们将在Android模拟器中执行我们的应用程序。所以在你启动一个模拟器之前,必须先创建一个AVD。创建步骤如下:
1. 在Eclipse中,选择Window > AVD Manager
2. 在左边面板选择Virtual Devices
3. 点击 New...
然后来到Create New AVD对话框
4. 输入虚拟机的名字,我自己的虚拟机都是使用系统版本命名,例如“AVD2.2.
5. 选择一个target(Android SDK系统版本例如2.3.3)。然后本章为了简单,后面的字段就省略掉了
6. 点击 Create AVD.
1.3 创建一个新的Android项目
下面我们来创建一个新Android的项目,步骤如下:
1. 在Eclipse中, 选择 File > New > Project...
如果你的ADT插件安装正确,那么应该会显示出如图1-1的界面
图1-1 在Eclipse创建Android项目的截图
2. 选择"Android Project"然后点击Next
3. 按照以下步骤填写一些项目细节,如图1-2所示:
◆Project name: HelloAndroid
◆Build Target: 根据你虚拟机创建的系统版本来选择对应的Application name: Hello, Android
◆Package name: com.example.helloandroid (包名)
◆Create Activity: HelloAndroid(主Activity名)
图1-2 在Eclipse创建Android项目中填写相应的细节
这里我们讲以下Min SDK Version字段:当我们Build Target选择的是2.1(对应的API Level为7)时,这里应该填7或者低于7的版本,例如3或者4。切记不能填写高于7的。不然会有一些错误和隐患。我们的项目已经创建好了,然后我们在Eclipse左边的Package Explorer面板打开HelloAndroid.java文件,位于HelloAndroid > src > com.example.helloandroid。代码如下:
package com.example.helloandroid; import android.app.Activity; import android.os.Bundle; publicclassHelloAndroidextendsActivity{ /** Called when the activity is first created. */ @Override publicvoid onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.main); } }
代码清单1-1
注意我们的HelloAndroid是继承于Activity类的。一个Activity是一个单一的应用程序实体,用于执行动作。一个应用程序可能有许多个Activityies组成,但在某一时刻只有一个Acitvity与用户在交互。当你的Activity启动后,Android系统会调用onCreate()方法。你应该在这里执行一些初始化和UI设置的操作。一个Activity不需要有一个用户界面也能正确执行,但通常我们应该加一个基础的用户界面来显示一些东西,下面让我们来修改一些代码!
1.4 构建一个用户界面
同样在HelloAndroid 类中,改进了一下代码。下面的粗体就是我们新添加的。
package com.example.helloandroid; import android.app.Activity; import android.os.Bundle; import android.widget.TextView; public class HelloAndroid extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); TextView tv = new TextView(this); tv.setText("Hello, Android"); setContentView(tv); } }
代码清单1-2
一个Android用户界面是由Views的对象层次结构组成的。一个View是一个可绘制的对象,并当做一个UI布局元素,例如一个按钮,图片或者此处TextView(文本标签)。每一个UI元素的都是一个View,它们都直接或间接继承与View类。这里我们创建一个TextView对象,需要传一个Context实例对象。Context用于处理与系统相关的一些操作,例如解决资源调用,获得访问数据库的一些接口和首选项等。Activity 类继承自Context,所以这里可以直接传”this”。接下来我们需要使用setText()来设置文本的内容。最后我们需要通过setContextView()把TextView添加到我们当前的Activity界面中。如果你没有调用setContextView(),那么系统不会显示这个TextView,而是显示一个背景全黑的空白屏幕。
好的,”Hello,Android”的项目代码已经写好了,接下来我们需要执行它了。
1.5 执行应用程序
由于在Eclpise中有插件,我们执行它很容易,并且方法有很多种,这里我们可以在项目上点击鼠标右键->选择Run As->Anroid Application
Eclipse插件自动为您的项目创建一个新的运行配置文件,然后启动Android模拟器。根据您的环境,Android模拟器可能需要几分钟才能全面启动完毕,所以请耐心等待。当启动完毕后,Eclipse插件会安装应用程序,并启动默认的Activity。显示效果如图1-3所示:
图1-3 在Eclipse中使用模拟器启动Hello,Android后的截图
在应用程序灰色栏中看到的“Hello,Android”实际上是应用程序的标题。创建项目时,Eclipse插件会自动创建res/values/strings.xml。然后再AndroidManifest.xml会引用strings.xml中的标题字段。标题下面的文字,才是我们在代码中写的TextView。虽然“Hello World”已经写完了,但是你可以继续阅读项目中其他有价值的信息。
1.6 升级界面为一个XML布局
在 "Hello, World" 例子中我们使用的是代码布局。如果你是位经验丰富的的UI程序员,你可能熟悉这种做法是非常脆弱的:布局中的微小变化可能导致大量代码的改动,并且很容易与之忘记相关的其他View,这会导致你的布局错误并且浪费大量时间在调试。因此Android提供了一种基于XML布局文件来代替用代码写布局的模式。下面让我们来举一个例子,跟上面的“代码清单1-2”一样的效果,我们不使用代码布局一个TextView,而使用以下的XML文件来代替:
<?xml version="1.0" encoding="utf-8"?> <TextView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/textview" android:layout_width="fill_parent" android:layout_height="fill_parent" android:text="@string/hello"/>
这是一个简单的Android XML布局文件结构:它是一个树节点,其中每个节点都是一个View。我们使用的元素都是继承自View类的,TextView是Android已经写好的一个View,当然我们也可以在代码自定义View。这种结构可以很容易的快速建立用户界面,比起代码布局,它使用更简单的结构和语法。在上面的XML布局文件中只有一个TextView节点,但这里用到了几个属性。如表格1-1所示:
属性 |
描述 |
|
这是一个XML命名空间声明,告诉Android的工具,你会引用在Android命名空间中定义的共同属性。在每一个Android的布局文件的最外层标签必须有此属性。 |
|
该属性指定一个TextView元素的唯一标识符。您可以使用分配的ID从源代码中引用它。 |
|
该属性定义了这个View需要占用的宽度,“fill_paren”表示占用父节点的全部宽度,这里的父节点即屏幕。 |
|
和宽度类似,表示高度 |
|
这设置TextView中应显示的文字。在这个例子中,我们使用的是硬编码的字符串值,而不是引用的一个字符串资源。当然更好的做法是引用在res/ strings.xml文件定义的hello字符串。因为这样符合国际化。这里为了简单起见我们暂用硬编码。 |
表格1-1 XML中节点的属性
这些XML布局文件被放置在你工程的res/layout/ 目录下。”res”代表资源,该目录包含所有的非代码资源,除了布局文件夹,还包括图像,声音,本地化字符串等。
Android默认的布局方式是纵向布局,在多屏幕多分辨那章,笔者已经介绍过了,这里我们的xml是放入layout/下的,layout就是默认的纵向布局,如果你吧手机横向放置,android就会显示横向的布局,由于我们没有在layout-land下放入布局文件,所以它会直接的在纵向布局下拉伸,当然这里只是一个小提示,真正做好一个项目,这些细节是必须考虑的。这里为了简单起见,我们就让他拉伸吧。Eclipse插件在我们新建项目的时候就在res/layout/下创建了一个main.xml的布局文件。我们在“代码清单1-2”中是没有使用这个main.xml布局文件的。
现在让我们重新修改一下”代码清单1-2”,如“代码清单1-3”所示
package com.example.helloandroid; import android.app.Activity; import android.os.Bundle; public class HelloAndroid extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); } }
代码清单1-3
我们放弃了,“代码清单1-2”中的代码生成View的方式,转而使用“代码清单1-3”XML布局文件,你会发现仅仅一行就搞定了,接下来让我们看看R类(俗称R文件)。在Eclipse中的项目中的gen/下找到我们的R.java。代码如下
package com.example.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 id { public static final int textview=0x7f050000; } 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; } }
代码清单1-4
一个项目中的R文件都是用来保存所有资源的引用,代码中如果要引用资源文件就是使用R文件引用他们的ID。此文件请不需要修改,当你有资源复制到项目中时,他会自动生成资源的引用ID。
1.7 调试你的项目
当然调试是必不可少的,Eclipse中的Android插件与Eclipse的调试器良好的集成在一起。为了证明这一点,下面我们来看“代码清单1-5”
package com.example.helloandroid; import android.app.Activity; import android.os.Bundle; public class HelloAndroid extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Object o = null; o.toString(); setContentView(R.layout.main); } }
代码清单1-5
在你的代码中引入一个空指针异常,然后你会在模拟器中看见如图1-4的效果。
图1-4 Android设备中出现空指针异常
我们可以在Object o = null;这一行设置一个断点(双击旁边的代码行),然后右键选择Run - > Debug As - > Android Application。然后运行调试模式,并会在断点处停下来。然后进入调试界面,你可以鼠标悬停或者观察右上角中变量的值,如图1-5所示:
图1-5 Android调试界面截图
完整项目下载链接:http://url.cn/TidNvn
本文来自jy02432443,QQ78117253。转载请保留出处,并保留追究法律责任的权利