作者 【美】Carmen Delessio , Lauren Darcey , Shane Conder

1.5 定制应用
Android应用开发入门经典(第3版)
刚才创建的简单应用会显示如图1.11所示的词组“Hello world!”。读者可能会想要定制这个应用以加入一些交互性功能,如添加一个可供输入数据的字段和一个按钮,当用户单击按钮时输入的文本会出现在屏幕的中央。

1.5.1 更新用户界面
定制应用的第一步是更新用户界面。

Try It Yourself

使用可视化编辑器更新用户界面

使用内置于ADT的可视化编辑工具可以添加一个按钮和EditText域。EditText域是一个文本输入域。要完成这个任务需要执行下列步骤。

1.在res/layout文件夹中找到activity_main.xml文件,这个文件就是创建应用时所展示的文件。

2.在组件面板的Form Widgets区域中选择一个按钮并将其拖动到应用的画布上,如图1.11所示。

3.选择组件面板中的Text Fields区域,选中第一种EditText域并将其拖动到画布上。在拖动的时候读者可以看到词组“Plain Text”,如图1.12所示。




android应用开发全程实录 android应用开发案例教程_移动开发



1.5.2 在代码中增加动作
现在已经为应用定制了一个简单的用户界面,并且也已经添加了引用Button和EditText的代码,下一步要做的就是更新屏幕中央的TextView了。程序清单1.1给出了刚才使用可视化编辑器创建的按钮的XML代码。第2行代码将Button的id指定为button1,EditText的id为editText1,原先的TextView的id为textView1。这些id是非常重要的,因为在代码中将会使用它们来引用这些用户界面。

程序清单1.1 在XML布局中定义的Button


android应用开发全程实录 android应用开发案例教程_java_02



这个按钮的作用是接收在 EditText 输入的信息,并在按钮被点击时将这些信息放入TextView 中。要完成这一任务的第一步是要在用户界面和代码之间建立连接,第二步是在Button上添加一个动作。

读者需要修改生成的代码。在Eclipse中选中MainActivity.java,然后需要修改onCreate()方法中的代码,但在这之前首先需要引入这些用户界面元素。


android应用开发全程实录 android应用开发案例教程_Text_03



这些Java类位于Android的widget包中。

接下来是要在 onCreate()方法中添加代码,以便将布局文件中的资源与代码关联起来,程序清单1.2给出了 onCreate()方法。第5行到第9行定义了一个可在代码中使用的EditText、TextView以及Button,这种关联关系是通过findViewById()方法来建立的。第4行将项目中res/layout文件夹下名为activity_main.xml的XML布局文件与这个Activity绑定了起来。第5行到第8行分别引用了在该文件中定义的各个id。


android应用开发全程实录 android应用开发案例教程_android应用开发全程实录_04



在第5行和第6行的声明中加入了final修饰符。final变量在赋值之后是无法改变其值的。在本例中之所以这样做是为了在处理Button事件的代码中使用这些变量。如果不将变量e声明为final的话,就会在Eclipse中看到如下的错误:


android应用开发全程实录 android应用开发案例教程_Text_05



这个错误出现在第 10 行。第 10 行在一个内部类中使用了变量 e。第 8 行声明了类OnClickListener()的一个新实例。像这样在一个单独的类中使用一个可能会发生变化的变量是不允许的,而将e声明为一个final变量之后就可以在内部类中使用它了,因为可以确保它的值不会发生变化了。当然,读者也可以将这个EditText定义为类的一个字段,这样的话它就有了全局作用于并且对所有方法都可见了。根据EditText域中的数据来更新TextView的代码位于第10行,它将从变量e中读取的文本设置在变量t中。第10行位于Button b的onClick()方法中。第8行的OnClickListener()告诉Button b监听点击事件。当这个Button上的单击事件发生时就会触发OnClickListener中的onClick()方法,该方法中的代码会更新TextView。

完成这些修改之后,就可以在模拟器中运行这个应用并观察所发生的交互了。`