概述
建立你的第一个应用程序
欢迎来到Android应用程序开发教程!
本教程将教你如何建立你的第一个Android 应用程序。你会学习如何创建一个Android项目,如何运行可调试的应用程序。还会学习到Android 应用程序设计的一些基础,包括如何建立一个简单的用户界面以及处理用户输入。
在开始本教程之前,你得确定已经安装了开发环境,需要:
1、 下载Android SDK。
2、 安装适用于Eclipse(如果打算用EclipseIDE的话)的ADT插件
3、 使用SDK Manager下载最新版本的SDK 工具以及SDK平台
注意:开始本教程前,需要确保你已经安装了最新版本的ADT插件版本和Android SDK。本教程里描述的程序可能不适用于老版本。
如果你还没有准备以上所需,就从下载Android SDK开始并一步步安装,完成安装就可以开始本教程了。
本教程使用辅导模式,并且渐进式地建立了一个小的Android 应用程序,它会教你一些关于Android开发的基础概念,所以跟着学习每一步很重要。
创建Android项目
Android项目包含了组成Android应用程序的源代码的所有文件。Android SDK提供的工具让你创建一个新的Android项目,在这个项目中包含了Android项目默认的文件夹以及文件。
本教程展示的是如何用Eclipse(有ADT插件)或是使用SDK提供的命令行工具创建一个新项目。
注意:你应该已经安装好了Android SDK,并且如果正在使用Eclipse,则还要安装ADT插件(22.6.2版本或者更高)。如果没有这些,就在开始本教程之前,先完成安装Android SDK、配置好开发环境并正确安装ADT(如果你打算使用Eclipse开发的话)。
用Eclipse创建一个项目
1、 在工具栏上单击“ ”(New)项。
2、 在显示出来新建对话框中,打开“ Android”文件夹,选择” AndroidApplication Project”,然后单击“Next”按钮,启动创建Android应用程序向导,如下图所示:
3、 在“New AndroidApplication”对话框中填写项目相关信息:
l Application Name是呈现给用户的应用程序名称。这个项目的名称是:“My First App”。
l Project Name是项目目录的名字以及在Eclipse中可见的名字。
l Package Name是应用程序的包的命名空间(在Java编程语言中的包也遵循同样的规则)。这个包名必须在Android系统上安装的所有包中都是唯一的。因此,建议使用的是组织或者出版实体的域名。就这个项目而言,可以使用类似“com.example.myfirstapp”。但是以“com.example.”为前缀的包名的应用程序是不能在Google Play上发布使用的。
l Minimum Required SDK是你的应用程序支持的Android最低版本。为了尽可能地支持很多设备,你应该将这个SDK设置成可用的最低版本。为该项目设置该集为默认值。
l Target SDK表明Android的最高版本,这个版本应该是在你的应用程序中经过测试的。
建议:当一个新的Android SDK版本发布的时候,我们应该在新版本上测试我们的应用程序并且将此配置升级这个版本,以便支持新平台特征。
l Compile With是指用于编译应用程序的平台版本。默认情况下,将它设置为在SDK中可用的Android最新版本。你当然可以建立一个应用程序来支持较早平台版本,但是设置最新平台版本的目的在于允许启用新特征并且让你优化你的应用程序而在最新设备上能有更好的用户体验。
l Theme指定应用程序的UI风格。
单击“Next”按钮。
4、 在下一个对话框中配置应用程序,这里使用默认选择并单击“Next”按钮,如下图所示:
5、 下一个对话框能帮助你为应用程序创建一个启动图标。
你可以用几种方法来定制一个图标,工具能为所有屏幕密度生成一个图标。在发布应用程序之前,应该要确保图标满足图标设计指南中定义的规格。如下图所示:
单击”Next“按钮。
6、 在这个对话框中你可以选择一个activity模板,以此来开始建立你的应用程序。
对于该项目,选择BlankActivity。如下图所示:
单击”Next“按钮
7、 将activity的所有细节都设为默认状态,如下图所示:
单击”Finish“。
你的Android项目现在就是一个包含一些默认文件的基本的”Hello World“应用程序。
用命令行工具创建项目
如果你没有使用有ADT插件的EclipseIDE,那你还可以用SDK提供的命令行工具来创建项目:
1、 进入Android SDK的tools/路径。
2、 执行:
android list targets
它会打印出当前SDK中可用的Android平台的清单。找出你想用来编译应用程序的平台,对目标id做上标记。我们建议你选择能用的更高版本。你也可以建立你的应用程序来支持老版本,但是设置建立目标为最新版本能让你对最新设备都能优化应用程序。
命令执行结果片段如下图所示:
如果你没有看到列出来的目标,那就需要安装一些使用了Android SDK Manager工具的平台。
3、执行:
android create project --target <target-id> --name MyFirstApp
--path <path-to-workspace>/MyFirstApp --activity MainActivity
--package com.example.myfirstapp
用目标列表(前面步骤中的)里的一个id来代替<target-id>,并用位置来代替<path-to-workspace>,这个位置是你想要保存Android项目的地方。
你的Android项目现在是一个包含一些默认文件的基本的”Hello World“应用程序。要运行它,继续下一教程。
提示:添加 platform-tools
和tools
目录到你的PATH
系统
环境变量中。
运行你的应用程序
如果你跟着前面的教程创建了一个Android项目,那它包括一套默认的“Hello World”源文件,它们允许你立刻运行应用程序。
你如何运行应用程序取决于两件事:是否有一个Android真机以及是否正在使用Eclipse。本教程告诉你如何在真机和模拟机上安装并运行应用程序,以及分别用Eclipse和命令行工具来实现。
在运行应用程序之前,你应该要知道Android项目中的一些目录和文件:
AndroidManifest.xml
这个manifest file描述了应用程序的基本特点,定义了它的每一个组件。将来你能看到更多的配置。
你的manifest中应该包括的最重要的元素之一就是<uses-sdk>元素。它声明在使用了 android:minSdkVersion 和android:targetSdkVersion属性之后,应用程序就兼容不同的Android版本。对于你的第一个应用程序,结果如下所示:
<manifest xmlns:android="http://schemas.android.com/apk/res/android" ... >
<uses-sdk android:minSdkVersion="8"
android:targetSdkVersion="19" />
...
</manifest>
这里建议你将android:targetSdkVersion设得尽可能的高,并且在相应的平台版本上测试你的应用程序。更多信息,见Supporting Different Platform Versions。
src/
应用程序主要的源文件的目录。默认情况下,它包括一个Activity类,当你在使用应用程序图标时启动该程序,这个类就运行了。
res/
包括了用于应用程序源的一些子目录。这里有几个:
drawable-hdpi/
drawabled对象(例如位图)的目录,这些对象是为高密度(hdpi)屏幕设计的。其它的drawable目录包含为其它屏幕密度设计的目录。
layout/
定义应用程序的用户界面的文件目录。
values/
用于其它多种XML文件的目录,这些文件包括了源的集合,例如字符串和色彩定义。
当你建立并运行默认的Android应用程序时,默认的Activity类就启动并加载一个说“Hello World”的布局文件。结果没有什么可兴奋的,但是重要的是你会理解在开始开发之前如何运行应用程序。
在真机上运行
如果你有一个Android真机,下面就是如何安装并运行应用程序:
1、 使用USB线连接开发机器和Android设备。如果在Windows上开发,也许需要为设备安装合适的USB驱动。帮助安装驱动,见OEM USB Drivers文档。
2、 在设备上启用USB调试。
l 在大部分运行Android 3.2或者老版本的设备上,可以在Settings > Applications >Development找到选项。
l 在Android 4.0或者更新版本上,选项是在Settings > Developer option里。
注意:在Android4.2或者更新版本上,默认情况下,Developer options是隐藏的。要使它可用,进入Settings > About phone,敲7次Buildnumber。返回之前的屏幕,就可以找到Developer options。
在Eclipse中运行应用程序:
1、 打开其中一个项目文件,在工具栏上单击“Run ”
2、 在显示出来的“Run as”窗口中,选择Android Application,单击“OK”。
Eclipse在已经连接的设备上安装并启动应用程序。
或者也可以从一条命令行来运行应用程序:
1、 将目录切换到Android项目的根上并执行:
ant debug
2、 确保PATH环境变量中包含了AndroidSDK platform-tools/
目录,之后执行:
adb install bin/MyFirstApp-debug.apk
3、 在设备上定位MyFirstActivity并打开它。
这就是如何在设备上建立并运行Android 应用程序。开始开发,继续学习下一教程。
在模拟器上运行
无论你是使用Eclipse还是命令行,要在模拟器上运行应用程序,首先都需要创建一个Android VirtualDevice (AVD)。AVD是用于Android模拟器的一个设备配置,这个模拟器允许你模拟多种设备。
创建一个AVD,你需要:
1、启动AVD Manager
a.在Eclipse下,从工具栏单击AVDManager 。
b.在命令行下,将目录切换到<sdk>/tools/并执行:
android avd
2、在AVD Manager面板上,单击“New”。
3、 为AVD填充细节。给它一个名字,一个平台目标,一个SD卡的大小以及皮肤(HVGA是默认的)。
4、 单击“Create AVD”。
5、 在AVD Manager中选择一个新的AVD并单击“Start”。
6、 模拟器启动后,解锁模拟器屏幕。
从Eclipse下运行应用程序:
1、 打开其中一个项目文件并从工具栏中单击“Run ”。
2、 在显示出来的Run as窗口中,选择AndroidApplication并单击“OK”。
Eclipse在AVD上安装并启动应用程序。
或者从命令行中运行应用程序:
1、 将目录切换到Android项目的根,并执行:
ant debug
2、确保PATH环境变量中包含了AndroidSDK的platform-tools/目录,之后执行:
adb install bin/MyFirstApp-debug.apk
3、 在模拟器上定位MyFirstActivity并打开它。
这就是如何在模拟器上建立并运行Android 应用程序。
建立一个简单的用户界面
用于Android 应用程序的图形化用户界面是使用View和ViewGroup对象的层次结构来建立的。View对象通常是UI小部件,如按钮或者文本框,而ViewGroup对象是不可见视图的容器,它们定义了如何叠加子视图,如在格子或者垂直列表中。
Android提供了一个XML词汇表,该表对应了View和ViewGroup子类,这样你就能在XML中,使用一个UI元素的层次结构来定义UI了。
可供选择的布局
基于某些理由,在XML中声明UI布局而非实时代码很有用,它还尤其重要,所以你能为不同的屏幕尺寸创建不同的布局。例如,你可以创建两种版本的布局,然后告诉系统在“小”屏幕上使用一种,在“大”的上用另一种。
在本教程中,你将在XML中创建布局,这个布局包含一个文本框和一个按钮,在下面的教程中,当按下按钮时发送文本框的内容到另一个activity,被启动的Activity将显示这些内容。
创建线性布局
从res/layout/目录中打开 fragment_main.xml文件。
注意:在Eclipse中,当你打开一个布局文件时,首先呈现出来的是图形布局编辑器。这是一个使用所见即所得的工具来帮助你建立布局的编辑器。对于本教程而言,就要直接用XML来工作了,因此,单击位于屏幕底部的 fragment_main.xml tab来打开XML编辑器。
在你创建了该项目时所选的BlankActivity模板包括了 fragment_main.xml
文件,该文件带有一个RelativeLayout根视图和一个TextView子视图。
首先,删掉<TextView>元素并将<RelativeLayout> 改成<LinearLayout>。然后添加android:orientation属性并将它设成"horizontal"。结果如下所示:
<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin">
</LinearLayout>
LinearLayout(线性布局)是ViewGroup的子类,它将所有子View以垂直或者水平方式布局出来,这个方向通过android:orientation属性指定,这个属性只有横向(horizontal)和纵向(vertical)两个取值。LinearLayout的每一个子View都会按照XML文件中的顺序在屏幕上显示出来。
另外两个属性,android:layout_width和android:layout_height对于所有View都是必须的它们指的是所有View的尺寸。
由于LinearLayout在布局中是一个根View,所以通过设置width和height为“match_parent”,LinearLayout应该填充对应用程序可用的整个屏幕区域。“match_parent”值指定,每一个子View的width或height需要匹配父View的width和height。
添加文本框
为创建用户可编辑的文本框,要往<LinearLayout>中添加一个<EditText>元素。
和每一个View对象一样,必须定义特定的XML属性来指定EditText对象的属性。这里将告诉你如何在<LinearLayout>元素里指定这个<EditText>元素的重要属性:
<EditText android:id="@+id/edit_message" android:layout_width="wrap_content" android:layout_height="wrap_content" android:hint="@string/edit_message" />
以上属性详解如下:
android:id
它为视图提供了一个唯一的识别,用它,就能从应用程序代码中引用对象,并通过这个对象的引用对此视图进行操作。
在引用任何一个资源对象时,“@”这个符号是必须的。它是跟随着资源类型的(此例中是id),“/”以及资源名称(edit_message)。
仅当首次定义资源ID的时候,资源类型前是必须要有“+”号的。在编译应用程序时,SDK工具使用ID名称来在项目的gen/R.java文件中创建一个新的资源ID,这个gen/R.java指的是EditText元素。一旦这样声明过资源ID一次后,其他对于ID的引用就不需要这个“+”号了。仅在指定一个新资源ID时才要使用“+”号,对于具体的资源则不需要,如字符串或者布局。关于资源对象的更多信息见下面的解释。
关于资源对象
所谓资源对象,它只是一个唯一的整数名,它与应用程序的资源相关,如位图,布局文件或者字符串等。
每一个资源都有一个在项目的gen/R.java文件中定义好了的对应的资源对象。你可以在R类中使用对象名称来指向这个资源,如当你需要为android:hint属性来指定一个字符串的时候。你也可以创建任意一个资源ID,使用android:id属性来让它与视图关联,这就允许你从其他代码中引用那个视图对象了。
每次编译应用程序时,SDK工具都会产生R.java。不要手动修改这个文件。
更多信息,阅读ProvidingResources的指南。
android:layout_width
和android:layout_height
不使用特定大小的宽度和高度,取而代之的是用"wrap_content"来明确视图应该只是用所需的大小来适应视图的内容。要是你使用的是 "match_parent"
,则EditText元素就会铺满屏幕,因为它会匹配父LinearLayout的尺寸。
android:hint
这是一个默认的字符串,当文本框是为空时显示。尽可能不要使用硬编码的字符串作为值, 而是以"@string/edit_message"
值指定义在一个单独文件中的字符串资源。因为这指向一个具体的资源(不仅仅是一个识别),它不需要“+”号。然而由于你还没有定义字符串源,因此最初你将看到一个编译错误,在下一节中通过定义字符串来修改这个错误。
注意:该字符串资源和 edit_message
这个ID元素是一样的命名。但是,对资源的引用总是由资源类型(如id或者字符串)来划定范围的,所以即使使用同样的名字也不会引起崩溃。
添加字符串资源
当需要在用户界面中添加文本时,建议最好能指定每一个字符串都作为一个字符串资源。字符串资源允许你在一个位置管理所有UI中使用的字符串,这就让你更容易找到并升级文本更容易。使用字符串定义的另一个好处是使得应用程序非常方便的支持多语种。
默认情况下,Android项目包括在 res/values/strings.xml
上的一个字符串资源。添加一个名为 "edit_message"
的新字符串,设定值为"Enter a message."(可以删掉”Hello World”字符串。)
处在这个文件的同时,还可以为你不久要添加的按钮添加一个“Send”字符串,名为"button_send"。
strings.xml的结果如下所示:
<?xml version="1.0" encoding="utf-8"?> <resources> <string name="app_name">My First App</string> <string name="edit_message">Enter a message</string> <string name="button_send">Send</string> <string name="action_settings">Settings</string> <string name="title_activity_main">MainActivity</string> </resources>
关于适用字符串资源来为其它语言本地化app的更多信息,见SupportingDifferent Devices类。
添加按钮
现在,添加一个<Button>到布局上,它在<EditText>元素之后出现:
<Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/button_send" />
高度和宽度都设置成 "wrap_content"
,这样按钮就是所需的大小,适合按钮的文本。这个按钮不需要android:id属性,因为我们不会从activity代码中引用它。
使输入框填充屏幕宽度
目前,布局设计好了,EditText和Button小部件就是所需大小,适合它们的内容,如图所示:
这样对于按钮就非常合适,但是对于文本框就并不如此了,因为用户也许要输入长一点的内容。所以,在文本框中填充没有用上的屏幕宽度就好了。可以用weight属性来在LinearLayout中做这件事,这个weight属性是我们用android:layout_weight属性就能指定的。
Weight值是一个数字,它指定了每个视图应该消耗的存在空间的数量,和别的视图所消耗的量相对应。这就类似一个饮料的成分:“2份伏特加,1份咖啡”,意思是这个饮料的2/3是伏特加。例如,如果你给出一个视图是2个weight,另一个是1个weight,总数是3,那么第一个视图就填充了2/3的剩余空间,第二个视图就填充了剩下的1/3。如果你再添加第三张视图,给它1个weight,则第一个视图(有2个weight)现在就获得了1/2的剩余空间,而剩下的两个视图分别都获取了1/4的空间。
对于所有视图而言,默认的weight是0,因此如果你仅仅指定了任何一个比0大的weight值到一个视图上,那么在所有视图得到它们所需的空间后,剩下有多少空间,这个视图就填充多少。因此,为了用EditText元素来在布局中填充剩余空间,就要给它设置为1的weight值并且不要给按钮设置weight值。
<EditText android:layout_weight="1" ... />
为在指定weight时改进布局效率,你应该将EditText的宽度改成0(0dp)。将宽度设为0就会改进布局,因为使用"wrap_content"作为宽度,这需要系统计算最终无关的一个宽度,而这又是因为weight值需要另一个宽度极端去填充剩余空间。
<EditText android:layout_weight="1" android:layout_width="0dp" ... />
下图显示的是在将所有weight分配到EditText元素时的结果。
下面是完整的布局文件现在应是怎样的:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="horizontal"> <EditText android:id="@+id/edit_message" android:layout_weight="1" android:layout_width="0dp" android:layout_height="wrap_content" android:hint="@string/edit_message" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/button_send" /> </LinearLayout>
这个布局适用于在创建项目时由SDK工具产生的默认情况下的Activity类,这样,现在你就能运行应用程序来看结果了:
l 在Eclipse下,在工具栏上单击Run 。
l 或者从命令行中,将目录改成Android项目的根,并执行:
ant debug adb install bin/MyFirstApp-debug.apk
继续下一教程,学习如何响应按钮按下,从文本框中读取内容,启动另一个activity等。
启动另一个Activity
完成前面的教程之后,你就得到一个有文本框和按钮的activity了。在本教程里,你将添加某个代码到MainActivity中,在用户点击Send按钮时,启动一个新的activity。
响应Send按钮
为响应按钮的点击事件,要打开fragment_main.xml布局文件,并将android:onClick属性添加到<Button>元素中:
<Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/button_send" android:onClick="sendMessage" />
android:onClick属性值是”sendMessage”,它是在用户点击按钮时系统调用的activity里的方法名。
打开MainActivity类(位于项目的src/目录下)并添加响应方法:
/** Called when the user clicks the Send button */ public void sendMessage(View view) { // Do something in response to button }
为了使系统将该方法匹配到给予android:onClick的方法名上,这类方法声明必须是如下所示的:
l 公共的
l 有一个void返回值
l 有一个仅作为参数的View(这个必须是被点击的View)
接下来,你就要填充该方法来读取文本框的内容,并将文本递送给另一个activity。
创建Intent
Intent是一个在单个组件之间(如两个acitivty)提供实时binding的对象。Intent代表一个应用程序“意图做某事”。Intent广泛用于任务中,但是最通常是用于启动另一个acitivty。
在sendMessage()方法中,创建一个Intent来启动被称为DisplayMessageActivity的activity。
Intent intent = new Intent(this, DisplayMessageActivity.class);
这就需要你Import Intent类:
import android.content.Intent;
提示:在Eclipse中,按Ctrl + Shift + O来引进缺失的类(Mac上是Cmd + Shift + O)。
这里用到两个参数
l 一个是Context(用这个是因为Activity是Context的子类)。
l 应用程序组件的Class,系统要将它递送给Intent(在这种情况下,应该启动activity)。
注意:如果你使用IDE(如Eclipse),那么引用DisplayMessageActivity将引发一个错误。这事因为类是不存在的。暂时忽略错误,不久就要创建类了。
Intent不仅允许你启动另一个activity,它还能携带一组数据到activity上。在sendMessage()方法内部,使用findViewById()来获取EditText元素,并将它的文本值添加到intent上:
Intent intent = new Intent(this, DisplayMessageActivity.class); EditText editText = (EditText) findViewById(R.id.edit_message); String message = editText.getText().toString(); intent.putExtra(EXTRA_MESSAGE, message);
注意:现在你需要一个android.widget.EditText的重要声明,等下就定义常量EXTRA_MESSAGE了。
Intent可以携带作为key值对的一组多样数据类型,即为extras。putExtra()方法将key名置于第一个参数,key值置于第二个参数中。
为了让下一个activity查询额外数据,你应该使用一个公共常量来为intent的extra定义key。因此将EXTRA_MESSAGE的定义添加到MainActivity类的顶部:
public class MainActivity extends ActionBarActivity { public final static String EXTRA_MESSAGE = "com.example.myfirstapp.MESSAGE"; ... }
用应用程序的包名作为前缀来为intent extras定义key,是非常好的习惯。这就确保了它们是唯一的,除非这个应用程序和其他应用程序交互。
启动第二个Activity
启动一个activity,得调用 startActivity()并将它传送到intent上。系统接收到这个调用,启动有Intent指定的Activity的实例。
有了这个新代码,那么由Send按钮调用的完整的sendMessage()方法就如下所示:
/** Called when the user clicks the Send button */ public void sendMessage(View view) { Intent intent = new Intent(this, DisplayMessageActivity.class); EditText editText = (EditText) findViewById(R.id.edit_message); String message = editText.getText().toString(); intent.putExtra(EXTRA_MESSAGE, message); startActivity(intent); }
现在,需要创建DisplayMessageActivity类来让它工作。
创建第二个Activity
使用Eclipse创建一个新activity,步骤如下:
· Project: MyFirstApp
· Activity Name: DisplayMessageActivity
· Layout Name: activity_display_message
· Fragment Layout Name: fragment_display_message
· Title: My Message
· Hierarchial Parent: com.example.myfirstapp.MainActivity
· Navigation Type: None
点击Finish。
如果正在使用一个不同的IDE或者命令行工具,则在项目的src/目录下创建一个名为DisplayMessageActivity.java的新文件,紧挨着原始的MainActivity.java文件。
打开DisplayMessageActivity.java文件。如果你是使用了Eclipse创建的这个activity:
l 该类已经包括了所需的onCreate()方法的实现。你将在稍后更新这个方法的实现。
l 还有onCreateOptionsMenu()方法的实现,但是应用程序不需要它,所以可以移除。
l 也还有onOptionsItemSelected()方法的实现,这个方法为操作栏的Up行为来作处理。保持这个方法的原样。
l 另外还有扩展Fragment的PlaceholderFragment类。在该activity的最终版本中,是不需要这个类的。
注意:如果你没有使用ADT插件的最新版本的话,那activity或许看起来会不同。确保你安装了最新的ADT插件版本来完成这次辅导学习。
DisplayMessageActivity类应该如下所示:
public class DisplayMessageActivity extends ActionBarActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_display_message); if (savedInstanceState == null) { getSupportFragmentManager().beginTransaction() .add(R.id.container, new PlaceholderFragment()).commit(); } } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); if (id == R.id.action_settings) { return true; } return super.onOptionsItemSelected(item); } /** * A placeholder fragment containing a simple view. */ public static class PlaceholderFragment extends Fragment { public PlaceholderFragment() { } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View rootView = inflater.inflate(R.layout.fragment_display_message, container, false); return rootView; } } }
如果你正使用的是一个IDE而非Eclipse,那么就要用以上代码来更新你的DisplayMessageActivity类。
Activity的所有子类必须实现onCreate()方法。在创建activity的一个实例时,系统调用这个方法。这个onCreate()方法就是你必须用setContentView()方法来定义activity布局,也是你应当为activity组件进行初始化设置。
注意:如果你正使用的是一个IDE而非Eclipse,则你的项目就不要包含由setContentView()要求的activity_display_message布局。这样就行了,因为你稍后将更新该方法,不会再用到那个布局了。
添加标题字符串
如果使用了Eclipse,你就可以跳过下一节,因为模板为新activity提供了标题字符串。
如果正使用一个IDE而非Eclipse,则要将新activity的标题添加到strings.xml文件中:
<resources> ... <string name="title_activity_display_message">My Message</string> </resources>
添加activity到manifest中
使用<activity>元素,在manifest文件AndroidManifest.xml中声明所有activity。
当使用Eclipse工具创建activity时,会创建一个默认入口。如果正使用一个不同的IDE,你就需要自己添加manifest了。如下所示:
<application ... > ... <activity android:name="com.example.myfirstapp.DisplayMessageActivity" android:label="@string/title_activity_display_message" android:parentActivityName="com.example.myfirstapp.MainActivity" > <meta-data android:name="android.support.PARENT_ACTIVITY" android:value="com.example.myfirstapp.MainActivity" /> </activity> </application>
android:parentActivityName属性声明了在应用程序逻辑层次结构里的这个activity的父activity的名字。系统使用这个值来实现默认导航行为,如Android4.1(API Level 16)或者更高版本上的Up navigation。使用Support Library以及添加<meta-data>元素,就可以为Android较早版本提供同样的导航行为。
注意:Android SDK应该已经包括了最新的Android Support Library,是用ADT Bundle包含的。但是如果正使用一个不同的IDE,那本应该是在Adding Platforms and Packages期间安装这个Android Support Library。当在Eclipse中使用模板时,Support Library是自动添加到项目上的(见列举在Android Dependencies下的库JAR文件)。如果没有在使用Eclipse,就需要手工把库添加到项目中了——跟着用于setting the Support Library的指南做,然后在返回到这里。
如果在用Eclipse做开发,那么现在就运行应用程序,但是不会产生太多的东西。点击Send按钮就启动了第二个activity,它使用了由模板提供的一个默认的“Hello World”布局。不久你将更新activity,来取代显示一个定制文本视图。因此,如果你正使用一个不同的IDE,不要担心应用程序不会编译。
接收Intent
每一个Activity都是由一个Intent来调用的,不管用户是如何导航到那里的。你可以通过调用getIntent()来获取启动activity的Intent,并检索包含有它的数据。
在DisplayMessageActivity 类的onCreate()方法中,获取intent并抽取由MainActivity传送的信息:
Intent intent = getIntent(); String message = intent.getStringExtra(MainActivity.EXTRA_MESSAGE);
显示信息
为在屏幕上显示信息,创建一个TextView小部件,使用setText()来设定文本。然后通过将TextView传递到SetContentView()上,将TextView作为activity布局的根视图来添加。
用于DisplayMessageActivity的完整的onCreate()方法如下所示:
@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // Get the message from the intent Intent intent = getIntent(); String message = intent.getStringExtra(MainActivity.EXTRA_MESSAGE); // Create the text view TextView textView = new TextView(this); textView.setTextSize(40); textView.setText(message); // Set the text view as the activity layout setContentView(textView); }
现在可以运行应用程序了。当它打开时,在文本框中输入信息,点击send,信息就在另一个activity上呈现出来了,如下图所示:
到这里,你已经建立了第一个应用程序。
最后
以上就是拼搏啤酒为你收集整理的Android应用程序开发——创建应用程序的全部内容,希望文章能够帮你解决Android应用程序开发——创建应用程序所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复