Android教程05 维纳斯的诞生

之前各讲中,分别讲解了安卓的开发环境、架构和基本概念。从这一讲开始,我将制作一个简单的应用,并通过逐步升级它的功能,连带出安卓开发的多个情境。

《维纳斯的诞生》是文艺复兴早期名画。相传美神维纳斯从海的泡沫中诞生,波提切利用大胆的笔触描绘这一古典神话。画面洋溢着对人体和美的热爱。如果在中世纪或者西班牙宗教审判时期,这幅画足够波提切利上火刑架了。

任务描述

我将制作一个简单的欢迎页面。页面中有一个按钮。点击后,将显示制作人姓名。

知识点包括:

  • 新建Activity:通过继承Activity类,来创建一个新的类。
  • 页面布局:LinearLayout
  • 按钮点击监:OnClickListener
  • 临时显示简单的文字信息:Toast用于显示简单的文字信息

编写视图

按照 第一个应用 中的介绍,创建一个Android项目Vamei,项目包的名字为me.vamei.vamei。

我将要创建一个页面。这个页面的视图定义在res/layout/activity_main.xml中。从  概念漫游(下) 中,我们已经知道,这个XML文件描述了一个视图树。内容如下:

这里采用了线性布局LinearLayout,根据它的 orientation 的属性"vertical",视图元素将从上向下排列。线性布局中包含一个TextView ,以及一个 Button 按钮。TextView用于显示文本"Welcome"。

视图元素有 layoutwidth 和 layoutheight属性,分别定义元素的宽度和高度。这两个属性可以是具体的数值,比如"10px",也可以是:

  • "match_parent" :与母元素相同
  • "wrap_content" :与包含的内容相同,如文字本身的尺寸

Button还有一个id,即author。在程序中我们可以借用这个id来引用该按钮。Button上文本是一个字符串。注意符号 @ ,表示这里引用了一个名为btn_text的字符资源。我们当然可以像"Welcome"那样直接使用一个字符串,但引用字符资源有额外的好处。我们可以在程序的多处重复利用的同一个资源条目,从而便于修改。该字符串保存在res/values/strings.xml中:

可以看到,名为btn_text的字符串资源为"who am I"。

编写Activity

上面XML定义的视图是静态的。想要实现动态的应用,我还需要一个配套的Activity。在src文件夹下的me.vamei.vamei包中,会有一个MainActivity.java。这个Java文件中包含一个MainActivity类,继承自Activity。我将其中的代码修改为:

在这个类中,我只包含了一个 onCreate()方法。当应用启动时,安卓将调用onCreate()方法。该方法有一个Bundle类型的参数,记录Activity的状态,我将在以后讲解。

onCreate()方法中主要做了两件事:

  1. 连接Activity与视图树。 setContentView() 方法为Activity增加了视图树。这里引用了activity_main.xml中的视图树。可以注意到,安卓中用 R 来代表资源。
  2. 监听按钮的点击事件。因为我们在activity_main.xml中定义了按钮的id,所以可以使用findViewById方法,便捷的引用按钮。View元素可以使用 setOnClickListner() 方法,为点击事件增加 OnClickListener 类型的监听对象。

用户点击按钮后,安卓将执行监听对象的onClick()方法。该方法利用Toast,显示一段文本,即R.string.author对应的字符串资源。在res/values/strings.xml中,已经定义该字符串为"vamei"。 Toast 是一个弹出的文字显示框。 makeText()的三个参数分别为弹出框的Context、要显示的字符串和显示时间。

注册Activity

已经完成的Activity需要在 AndoriManifest.xml中注册。这是安卓应用的配置文件,可以进行许多权限相关的设定。我的AndroidManifest.xml如下:

可以看到 <activity>标签中注册了MainActivity。<Activity>中还定义了该Activity的Intent Filter,即愿意接收的Intent。

运行

运行应用,效果如下:

好吧,这个界面离维纳斯还有点距离……

总结

一个单页Activity

LinearLayout, TextView, Button

layoutwidth, layoutheight, "wrapcontent", "matchparent"

setContentView()

setOnClickListener()

Toast.maketext()

<activity>

「Android教程」系列文章

文/ Vamei

0 Likes