2008年9月18日星期四

Android开发简明教程-3.初识Activity

让我们首先从MyApp的目录结构入手。可以看到,在根目录下有一个“AndroidManifest.xml”文件,这是Android程序的清单文件,任何项目的组成模块都需要在这个xml文件中首先进行声明。“src”目录包含了项目的Java源代码。“res”目录包含了项目的资源。资源包括drawable(图片)、layout(布局)、values(值),所有这些资源都有一个ID,它们都由“src”目录下的“R.java”自动维护,通常你不需要去手动修改“R.java”这个文件,在项目中,通过R这个类就可以获得对应资源的ID,从而访问所有这些资源。

让我们继续打开“src”下的MyApp.java文件,看一下默认生成的代码刚刚如何在屏幕上显示了“Hello World, MyApp”。
MyApp类继承自Activity,Activity是Android应用程序的重要组成部分之一,它通常表现为一个屏幕,可以显示用户界面,并响应事件,简单来说你可以把它理解成桌面程序的一个窗体。一个应用可以有多个窗体,在多个窗体间可以跳转,从这点来说Activity的功能类似。当然,这是一种粗糙的类似,在后面我们慢慢发现Activity的一些其它特点。
在重写的onCreate方法中,最后一行setContentView(R.layout.main)设置了当前Activity的视图(View)。View包含了用户界面的布局和内容属性(View中可以包含View或者是继承自View的widget——比如Button等等),Activity设置了View以后就可以呈现一个图形的用户界面。新建一个View有两种方法,一个是在代码中使用new View()方法——当然,完全在代码中创建一个用户界面并很好地组织它是一件很繁琐的事情,所以,还有一种更加直观的方法定义View,那就是xml布局文件,让我们打开“res/layout”目录下的main.xml文件看一下。
在右面的树状图我们可以看到,这个View由一个根元素LinearLayout组织所有的屏幕元素,。在这里加载了一个TextView,这个widget可以向用户显示一些文本信息。我们可以切换到xml的文本编辑模式进行查看和属性编辑:
其中TextView定义的属性中有这样一行:android:text="@string/hello",这是定义了TextView显示的文本内容。“@string/hello”表示引用了string资源的hello对象,打开“res/values”目录下的strings.xml文件,你可以找到hello的值。由于设置了TextView的text属性,所以,屏幕上会显示这样一行文本“Hello World, MyApp”:
让我们回到setContentView(R.layout.main)方法,这个方法原型是setContectView(int resourceID),我们通过R.layout.main可以得到main.xml这个布局文件的资源ID,因此,这个方法就设置了MyApp这个Activity的View,并且在屏幕上显示了出来。

让我们再尝试添加一些其它组件,比如Button:这个Button我给它一个id来标识叫buttonHit,这是通过Button的id属性定义的:android:id="@+id/buttonHit"。这个id同样可以在通过R这个类来引用(在这之前需要先编译main.xml这个文件),下面我们马上就要使用这个id,因为我们想给这个Button添加一个事件响应。

打开MyApp.java文件,我们在onCreate()方法中添加这个Button的Click事件响应。这里需要用findViewById(int id)方法从id获得View(包括所有继承自View的对象),再给Button添加onClickListener:
调试一下:在下一小节中,让我们看一下一个Android应用中的多个Activity之间的跳转和传值。

1 条评论:

Unknown 说...

谢谢牛哥的精彩教程,看了你的教程,我的学习总算有点进展了,懂得添加控件等一简单的操作;这感觉有点像当年用J2ME写AWT程序一样,呵呵,一直做J2EE,很久没有回味一下写CS程序的体验了