`
bk_lin
  • 浏览: 322151 次
社区版块
存档分类
最新评论

Android开发从入门到精通(5)

阅读更多

第五章Android程序:Hello World! 

Android程序:Hello World! -第五章(1

关键技能和概念

● 创建新的Android项目

● 同Views一起工作

● 使用一个 TextView

● 修改main.xml 文件

● 在Android模拟器上运行应用程序

    为了让你能够对在Android上编程有一个良好的印象,在第六章,你会在Windwos平台和Linux平台上使用Android SDK创建命令行应用程序。或者说,本章包含了在Eclipse创建程序的过程,第六章包含了使用命令行工具的创建过程。因此,在继续之前,你应当检查你的Eclipse的开发环境是否被正确的配置。再次回顾一下第三章关于Adnroid SDK的PATH声明。同时要确保JRE也是在你的PATH声明中。

提示

如果当你运行命令行示例,有任何与配置有关的问题时,请参考第二章第三章提到的步骤,并且查看Android SDK文档。

在Eclipse中创建你的第一个Android 项目

    要开始你的第一个Android项目,打开Eclipse.当你第一次打开Eclipse,它会打开一个空开发环境,这就是你要开始的地方。你的第一个任务是设置并且命名一个工作空间。选择 文件| 新建 |Android 项目,使你能够创建一个Android特有的应用程序向导。  

注意:

不要从新建菜单上选择Java项目。你的Android应用程序是在Java中写的,并且你在Java项目中进行开发,这个选项会创建一个标准的Java应用程序。选择Android项目来创建一个Android特有的应用程序。

    如果你没有看到啊Android项目这个选项,这就说明在Eclipse中,Android plugin没有被完全或者正确的安装。重新检查第三章中关于Android plugin的安装程序来修正这个问题。

新的Android项目向导为你创建2个东西:

● 一个绑住Android SDK的壳程序。这个将允许你使用所有Android库和包来进行编码工作,并且允许你在合适的环境中调试程序。

● 新程序的第一个壳文件。这些壳文件包含一些必要的支撑你将要编写程序的文件。就如同一个在Visual Studio中,它会在你的文件中产生的一些代码。使用Eclipse中的Android项目向导产生一些初始的程序文件和一些Android创建的代码。

    另外,新的Android项目向导包含一些你必须输入的选项。

    在项目的名称那个字段,只是为了举例,使用HelloWorldText这个名字,这个名字非常的容易把这个Hello World项目从其它你将要在本章中创建的项目分别开。

    在内容那个区域,保持缺省的选择:在工作区中创建一个新的项目这个选项必须被选中。并且使用缺省的位置这个选择框也应当被选中。这个将允许Eclipse在你缺省的工作区路径中创建你的项目。这样做的好处是很容易对你的项目进行排序,管理和查找。例如,如果你在工作在一个Unix基础的开发环境中,这个路径指向Home路径。如果你工作在一个Windows的环境中,工作路径将会是C:/Users/<username>/workspace。总之,有一些原因,你可能需要不选中缺省位置的选择框并且选择一个其它的路径。如果是这样的话,不管那个位置的选项,自己选一个好了。

    另外一方面,如果你在Eclipse设定(在第二章的最后一节中)中没有选中“使用这个作为缺省并且不要再询问”,你可能被要求定义一个项目的位置。在Eclipse的设置中选中“所有的新项目使用缺省工作空间路径设定”(并且提供在新Android项目向导位置字段)。如果你在Eclipse设定过程中不选中这个选择框,你需要通过点击浏览按钮并导航来选择一个路径。最后三个选项是在属性区域中。这些属性定义了你的项目是如何被统一到Android环境中。在包装名称字段,你为程序包装定义,例如:android.app.Activity或者 com.google.android.map.MapActivity.

注意:

包装名称遵从了标准的java命名指导方针,这个方针的建立是为了减少同名程序发布的风险。最高层的包装名称是公司的域名(如com,org和net)这个遵从了域名,如google。最后,一个为包装内容的描述性标题被提供。在本章中,Hello Wrold的包装名称将省略com来识别,因为这只是一个文本程序而且不会被发布。所有在本书中将来创建的包装将是可发布的并且是用com标识符

对于这个HelloWorldText应用程序,使用_programmers_guide.HelloWorldText这个名字。这个名字识别了属于这个程序的编码而且区别开你将开发的其他应用程序。

注意:

    如果你注意到你输入的这个屏幕,你会注意到当你输入程序名称,一个错误显示在本向导页面的顶端说你必须正确的填写所有的字段来继续。这个错误信息是提前并且有一些难以理解的因为你还没有填写完其他的字段。如果你看到这样的错误提示信息,忽略它并且继续完成下面两个字段的填写。

    下一个属性字段,活动的名称,这个要求输入是因为它会在程序的主屏幕上被提到。想一下,活动是一个显示你应用程序的窗口。没有活动,你的应用程序将无法做更多的工作。因为Android应用程序可以被一些活动组成,新Android项目向导需要知道哪一个活动回事缺省的。活动名称的字段是要求输入并且没有缺省值的,所以如果你必须提供一个来继续下去,本例使用HelloWorldText。这个保证了程序的简单而且在这里是个描述。

    最后的属性字段,应用程序名称,应用程序名称描述。这个就是安装在设备上用来管理的应用程序名称。再次说明,为了方便起见,使用HelloWorldText作为程序的名称。

提示:

程序名称和活动名称字段不一定要匹配。事实上,很多的编程者习惯于一个老的惯例,那就是程序的开始画面或者叫做主页。使用你感觉舒服的名字,为了说明的目的,本章假定你使用了建议的名字。

    点击结束来结束创建过程。本向导运行一个后台程序自动产生支持一个Android应用程序所需要所要求文件和文件夹。当过程结束时,你会有你的第一个Android应用程序项目,

提示:

如果结束的按钮不可用,你可能字在属性页面的字段内犯了一个错误。确保属性页面填写正确,Eclipse不会允许任何输入错误的可能引起问题发生的信息。返回确保所有的属性字段是正确的。下一节会仔细检查自动产生的Android文件和一些为你应用程序产生的壳条目的目的。

仔细查看Android创建的文件 第五章(2)

    本部分讨论Android刚刚创建的新文件。一个非常全面的结构已经为你创建好了,而且,如果你不知道要看什么的话,你最终或许会在不应该放置代码的地方放上代码。有一些Android提供的文件你需要去修改,并且有一些你不能修改。知道这些信息会避免你不得不去重新创建项目。

    在你打开的项目中,首先看一下Package Explorer,一个或者二个在主要开发区域面板的左边上的制表符。

注意:

如果你的Package Explorer没有打开,你可以通过选择Windows | Show View | Package Explorer.激活它。

    你应当看到一个根目录,本例中叫做HelloWorldText。根目录是你所有项目文件的“家”或者“容器”,你自己和Android创建的文件都会放在这里。从Package Explorer很容易进入。现在会有比较少的一些项目在你的根目录里:一个AndroidManifest.xml文件,在一个参考库里的一个包装,和三个目录(res,assets和src)。我们轮流来讨论这些项目。

AndroidManifest.xml 
AndroidManifest.xml 文件是一个指定全局设定的地方。如果你是一个ASP.NET的开发者,你可以认为AndroidManifest.xml是Web.config和Global.asax的二合一。(如果你不是APS.NET的开发者,AndroidManifest.xml就是意味着是个存放设定的地方)。AndoridManfiest.xml将包括如程序许可,活动,和意向过滤器等的设定。标准的AndroidManifest.xml文件应当包含下面的信息:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android=http://schemas.android.com/apk/res/android 
package="testPackage.HelloWorldText"> 
<application android:icon="@drawable/icon"> 
<activity class=".HelloWorldText" android:label="@string/app_name"> 
<intent-filter> 
<action android:value="android.intent.action.MAIN" /> 
<category android:value="android.intent.category.LAUNCHER" 
/> 
</intent-filter> 
</activity> 
</application> 
</manifest>

如果你创建一个应用程序,你将要在这个文件里增加信息。注意,你提供的包装名称已经列在这里了,同样包括你的活动所需的动作。

引用库和目录 - 第五章(3)

    一个引用库的列表也包含在根目录里了。通常,对于一个新手的项目,你应当只看一个库。扩展引用库的分支并且仔细查看当前你的应用程序项目所引用的库。由于它是一个新的Android项目,你会在项目引用里看到一个库,那就是android.jar,Android SDK(如果你熟悉Java SDK,android.java是同Java的rt.java非常类似的文件。在rt.java里封装了很多java的API)。Android Plugin确保了这个是唯一被你应用程序引用的库。应用程序需要引用SDK来获得进入在SDK库内所有类别,比如你的Views,Controls或者甚至谷歌的API。

注意:

Eclipse可以允许你增加用户定义的外部库。但是除非你确信这些外部的引用将在Android应用程序上工作,所以增加它们之前请三思而后行。

目录(路径)

    有三个目录在项目的根目录——res,assets和src。每一个都有着显著的目的。这些目录在你应用程序的运行中扮演着完整的角色。 
res 目录

    res目录是你项目资源放置并且编译你的应用程序的地方。当你创建一个新的Android项目,res目录包含3个子目录:drawable, layout, 和 values。 你会在很多的项目中使用 drawable 和layout分别放置并显示图形和布局。而values目录放置遍及程序全局的字符串。

注意:

一个引用到res目录和它内容是被包含在R.java文件中,在src目录中。我们会在本章的后面详细的讲解。drawable目录包含你程序可以使用和引用的真实图形。layout目录放置XML文件,当构造它的界面时,main.xml文件被应用程序引用。在本书的绝大多数应用程序中,你会去编辑在layout目录下的main.xml文件。这将允许你插入Views到程序的可视布局并显示它们。一个原始的main.xml文件包含下列代码:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android=http://schemas.android.com/apk/res/android 
android:orientation="vertical" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 

<TextView 
android:layout_width="fill_parent" 
android:layout_height="wrap_content" 
android:text="Hello World, HelloWorldText" 
/> 
</LinearLayout>

 

最后一个在res目录下的文件夹是values,放置了XML文件命名字符串。strings.xml文件是用来放置程序引用的全局字符串。

assets 目录

assets目录用来放置“原料”文件的。在这个目录中可以包含为流媒体和动画准备的音频文件。因为Android模拟器的beta音频驱动没有优化,我不会在本书的应用程序中使用任何的音频文件。

src目录

src目录包含项目里所有的源文件。当项目一创立,就会包含两个文件R.java和<活动>.Java(本例中是HelloWorldText.java)

注意:

<activity>.java 总是根据你的活动来命名。

Hello World!自动产生文件的详解 第五章(4)

R.java是一个由Android plugin自动产生并添加到你的应用程序中的文件。这个文件包含到drawable,layout和values目录的指针(或者目录里其它的项目,本例中是字符串和图标)。你不应当必须直接修改这个文件。在你大多数的程序里会总是提到R.java.为HelloWorldText自动产生的代码如下:

/* AUTO-GENERATED FILE. DO NOT MODIFY. 

* This class was automatically generated by the 
* aapt tool from the resource data it found. It 
* should not be modified by hand. 
*/ 
package testPackage.HelloWorldText; 
public final class R { 
public static final class attr { 

public static final class drawable { 
public static final int icon=0x7f020000; 

public static final class layout { 
public static final int main=0x7f030000; 

public static final class string { 
public static final int app_name=0x7f040000; 

}

注意:

    R.java文件的注释部分提供了关于这个文件起源的解释。它说明文件由aapt工具创建。在第六章,当你创建命令行版本的Hello World时,你将用命令行工具创建所有自动产生的文件。

    <activity>.java文件在src目录下,你会花费大多数时间在这个文件上。本例是HelloWorldText.java.这个是你的创建新的Android程序向导时由Android plugin创建并与活动名称匹配来命名的。不像本部分大多数你已经看过的文件,这个文件完全可以编辑。事实上,如果你不修改代码,它会为了做一点点的事情。

Package android_programmers_guide.HelloWorldText; 
import android.app.Activity; 
import android.os.Bundle; 
public class HelloWorldText extends Activity { 
/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle icicle) { 
super.onCreate(icicle); 
setContentView(R.layout.main); 

}

    在文件上面的三行是标准预处理器指令——那就是,如大多数的编程语言,在程序处理前声明是指令到编译然后运行。在本例中,你在package android_programmers_guide.HelloWorldText.有了定义和包含。

    下两行通过android.java从Android SDK中导入特别的包装。

import android.app.Activity; 
和 
import android.os.Bundle;

这些行告诉项目去包括所有你程序里面的代码之前包括所有来自导入包装的代码。这两行对于基本的Android程序非常的重要并且不应当被移除。

提示:

如果你在项目里没有看到.android.os.Bundle 的输入声明,在开发窗口展开树形。Eclipse会给出在第一个下面所有输入的声明,所以你必须展开树形结构来看其余的声明。

    现在让我们关注到你的类 HelloWorldText,你会看到它扩展了Activity class.Activity被从前一行导入。所有的程序源于Activity class,并且在Android上运行一个程序会需要这个起源。运行并在屏幕上显示某些东西必须从Activity起源。

    HelloWorldText的类保持了需要创建,显示并且允许程序的代码。在HelloWorldText的类中,现在只有一个方式来定义代码 onCreate( ).

    onCreate()方法把冰柱作为一个束。那就是所有点钱状态的信息被搜集作为一个冰柱对象并且被保存在内存了。在本程序中你不能直接处理冰柱,但是你需要知道它的存在和目的。

    文件中的下一行是真正可感受到的动作:

setContentView(R.layout.main);

    setContentView()方法把Activity的内容设置到指定的源。在本例中,我们通过R.java文件中的指针使用layout目录里的main.xml文件。现在的main.xml文件包含了HelloWorldText的屏幕和一个TextView。TextView起源于View并且被用来在Android环境中显示文本。回头再看main.xml的内容,你会看到它包含了下面的行:

android:text="Hello World, HelloWorldText"

    setContentView()方法被告诉去设置main.xml作为当前的View,并且main.xml包含了一个宣称“Hello World, HelloWorldText”的TextView。现在可能比较安全的去编译并运行HelloWorldText。要测试这个,运行你的HellowWorldText程序。选择 Run|Run to open the Run As dialog box, 选择一个Android 应用程序,然后点击OK。

    你新建立的项目包含创建Hello World应用程序自身的代码。总之,这个并不是太吸引人,而且也没有教你太多参与Android应用程序编程。你需要仔细研究项目本身并且看看项目是如何显示“Hello World!”信息的。

    当你创建一个新的,由Android plugin修改的main.xml程序的Android项目时究竟发生了什么。这是一个完美修改Android中 UI的一个例子。当项目被创建时,下面的代码行由Android SDK增加到main.xml中:

<TextView 
android:layout_width="fill_parent" 
android:layout_height="wrap_content" 
android:text="Hello World, HelloWorldText" 
/>

    在我讨论xml文件中存在的TextView时,我没有说它为什么能没有任何相应的代码就可以工作。在本书的早些时候提到有两种方式来为Android设计UI:通过代码,和通过main.xml文件。在先前的代码例子中,在xml文件中创建了一个TextView并且设定文本为“Hello World, HelloWorldText”。编辑main.xml中的这一行,按照下面的方式:

android:text="This is the text of an Android TextView!"

重新运行项目,并且你的运行结果应该如图所示(略)。利用一些时间并且用xml的TextView做实验。然后你可以转移到用另外一种方式来创建一个Hello World!应用程序了。

Hellow World! 再来一次 第五章(5)

在本部分中,你将创建另外一个Hello World!这次,你会使用编程代码而不是使用xml文件,并且你会自己来做大部分工作。第一步就是把main.xml里面已经有的TextView代码删除。下面就是TextView部分的代码。完全的删除它,使你的应用程序是一个空的壳。

<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Hello World, HelloWorldText"
/>
在移除了TextView代码以后,你的main.xml文件应该像下面这样:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android=http://schemas.android.com/apk/res/android
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
</LinearLayout>

    现在你有一个干净的main.xml文件了,并且一个干净的应用程序壳,你可以开始增加可以在屏幕上显示“Hello World!”的代码了。从打开HelloWorldText.java并移除下面的代码行开始:
setContentView(R.layout.main);

注意:

你仍旧需要为你新的应用程序来设置一个ContentView;但是你需要执行和现在的这个有一点细微的不同,所以在这里最好把完整的声明移除。

    这条使用setContentView()来把main.xml显示在屏幕上。因为你不会去使用main.xml来定义你的TextView,所以你不会去设置你的view。取而代之,你会用代码来构建TextView。

   下一步是从android.widget中导入TextView包装。这样你可以进入到TextView并且允许你创建自己的实例。把这些代码放置到当前HelloWorldText.java文件靠近顶部,现有导入声明的import android.widget.TextView的地方;

    现在,创建一个TextView的实例。通过创建这个TextView实例,你可以在屏幕上显示文本而不需要直接修改main.xml文件。在onCreate()声明的后面放置下面的代码:
TextView HelloWorldTextView = new TextView(this);
注意

    TextView在当前上下文中取得一个句柄作为一个变量。传递这个到TextView并和当前的上下文相关联。如果你跟从SDK的等级,HelloWorldText扩展至Activity,而Activity扩展至ApplicationContext,而再扩展至Context。这就是你如果传递TextView的。

    先前的代码行创建一个名叫HelloWorldTextView的TextView的实例,然后例示HelloWorldTextView,通过设置它到一个新的TextView。这个被上下文传递的新的TextView被完全的例示。

    现在,这个TextView已经被定义好了,你可以在里面增加文本。下面的代码指定“Hello World!”文本到TextView:
HelloWorldTextView.setText("Hello World!");

    这一行允许你设定你的TextView文本。setText()允许你赋值一个字符串到TextView。

    你的TextView已经被创建而且现在包含了你想要显示的信息。但是,如果简单的指定“Hello World”到TextView中不会在屏幕上显示任何的东西。如前面所讨论的那样,你需要设置ContentView来在屏幕上显示东西。所以,你必须使用下面的代码来设置TextView到上下文并且在屏幕上显示:
setContentView(HelloWorldTextView);

    仔细查看本行代码,你会发现你把setContentView到TextView。前面的三行代码是制作你的Hello World!应用程序。你创建一个Textview,赋值你的文本,然后显示在屏幕上。所有的事情就是这样,根本不复杂。完整的HelloWorldText.java文件应当像下面这样:

package android_programmers_guide.HelloWorldText;
import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;
public class HelloWorldText extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
/**Hello World JFD */
/**BEGIN */
/**Create TextView */
TextView HelloWorldTextView = new TextView(this);
/**Set text to Hello World */
HelloWorldTextView.setText("Hello World!");
/**Set ContentView to TextView */
setContentView(HelloWorldTextView);
/**END */
}
}
    现在在Android模拟器中那个编译并且允许这个新的Hello World!应用程序。选择 Run|Run或者按下CTRL-F11在Android模拟器中启动这个应用程序。

你刚刚创建了一个完整的Android活动。这个小的项目展示了一个常规Hello World!应用程序的运行。你在Android模拟器中通过设置TextView到Activity's ContentView中并且在手机上显示“Hello World!”信息。下一节中会用一个细微不同的方式执行一个Hello World!,使用一个图形。

Hello World! 使用一个图形 第五章(6)

    在本章,你会使用一个在编程中大家熟知的活动来熟悉Hello World!应用程序:显示图形。现在的电脑如果不显示图形就太过分了。这些图形显示的重点在于如何让它在屏幕上显示出来的能力。

    大概5年以前,在手机上显示图形是非常困难的一件事。和图形一起工作是我们这些现代电脑用户认为理所应当的事情之一了。我们每天看着不同类型的窗口,甚至没有想到这个是影像被发送到屏幕的。这个版本的Hello World!程序将显示一个Hello World!的图片。

    对于这个应用程序,使用New Android Project wizard(新Android项目向导)来创建一个新的项目并且命名为HelloWorldImage。

    程序创建好后,找到main.xml文件并把其中的TextView代码删除,这样你就有一个干净的项目文件了。如果你没有删除这个代码,最终将再次显示文本类型的Hello World!程序。

    在你开始写代码之前,你需要一个需要显示的图片。在你可选的图形程序内创建一个小的图片。为了方便起见,选择 Microsoft Paint,但是任何的程序都可以给你想要的图片。

    为这个图片命名为helloworld.png并且把它保存到 %workspace%/HelloWorldImage/
res/drawable 目录下。

注意:

不要把图片的名称大小写搞混了。图片的名称只应当是小写字母。如果你插入了大写字母,当你试着在Eclipse中用这个文件时,会得到一个错误的提示。

    在复制这个文件到正确的目录之后。helloworld.png这个图片应当显示在项目窗口中,在drawable目录下。

    打开R.java并且看一下它的代码。Eclipse应当增加了一个指针到helloworld.png.你的R.java文件应当同下面的类似:
/* AUTO-GENERATED FILE. DO NOT MODIFY.
*
* This class was automatically generated by the
* aapt tool from the resource data it found. It
* should not be modified by hand.
*/
package android_programmers_guide.HelloWorldImage;
public final class R {
public static final class attr {
}
public static final class drawable {
public static final int helloworld=0x7f020000;
public static final int icon=0x7f020001;
}
public static final class layout {
public static final int main=0x7f030000;
}
public static final class string {
public static final int app_name=0x7f040000;
}
}

有了一个干净的壳作为起点,并且一个可用的句柄到你要显示的图像,你可以开始增加你的代码了。可以以两种观点来看这个应用程序:XML基础的UI和代码为基的UI。

Hello World!代码为基的UI-五章(7

    假定你对HelloWorldText那个部分能够理解了,这个版本的Hello World!会比较的熟悉了。要开始的话,你需要输入显示图片功能的包装。文本显示使用一个TextView,图片显示就要用ImageView了。因此,你必须输入ImageView包装。和TextView一样,ImageView包含在android.widgets里:

import android.widgets.ImageView;

注意

TextView和ImageView都是从View派生的。这样就使得两者结构非常的类似并且容易执行。

    包装导入(输入)后,你可以创建你的ImageView并且在屏幕上显示它了。示例ImageView和示例ImageView是一样的。创建一个ImageVIew示例并且把它传递给上下文使用下面的代码:
ImageView HelloWorldImageView = new ImageView(this);

    下面是能够看到在ImageView和TextView之间的不同之处。这一步是关于设定你想要显示的东西。在TextView例子中,你使用setText()来设定TextView的文本为“Hello World!”,虽然TextView和ImageVIew都是派生于View,但是它们还是不同的并且因此要求不同的方式。显然,你也不会来为ImageView使用setText()。你需要使用setImageResource()来在ImageView中显示图片。并把句柄从R.java(句柄的语法是R.drawable.helloworld)传递到helloworld.png:

HelloWorldImageView.setImageResource (R.drawable.helloworld);

    最后,要把图片传输到屏幕,你必须设定ContentView。正如你在TextView做的一样,把ImageView传递到ContentView中。ContentView的工作就是把设定到对象的东西传递到屏幕上。
SetContentView (HelloWorldImageView);
Your final HelloWorldImage.java file should look like this:
package android_programmers_guide.HelloWorldImage;
import android.app.Activity;
import android.os.Bundle;
import android.widget.ImageView;
public class HelloWorldImage extends Activity {
/** Called when the activity is first created. */
Chapter 5: Application: Hello World! 77
@Override
public void onCreate (Bundle icicle) {
super.onCreate (icicle);
/**Hello World Image JFD*/
/**BEGIN */
/**Create the ImageView */
ImageView HelloWorldImageView = new ImageView(this);
/**Set the ImageView to helloworld.png */
HelloWorldImageView.setImageResource(R.drawable.helloworld);
/**Set the ContentView to the ImageView */
setContentView(HelloWorldImageView);
/**END */
}
}

    编译HelloWorldImage并且在Android模拟器中运行。在下一节,你将再次显示helloworld.png但是这次使用XML而不是代码。

Hello World! XML为基的UI - 第五章(8)

    本章通过比较使用XML为基的UI和代码为基的UI来给你一个比较的例子。正如你将要看到的,使用main.xml要求和代码为基的方式差不多同样多的代码来把图片发送到屏幕上。但是两个过程的句法不同。

    如果在上个例子中所作使用同样的项目,从HelloWorldImage.java文件中移除TextView代码。干净的文件应该看起来像这个一样:
package android_programmers_guide.HelloWorldImage;
import android.app.Activity;
import android.os.Bundle;
public class HelloWorldImage extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
}
}

    现在你有一个清白的历史可以开始,把上面的移到main.xml中,你需要为一个ImageView增加定义。开始增加一个空的ImageView标签到你的main.xml中:
<ImageView
/>

    你需要编辑ImageView的4个属性:android:id, android:layout_width,android:layout_height, 和 android:src。你会把这些属性添加到标签中,这些控制标签如何在屏幕上显示。

    android:id属性被用来作为ImageView的识别符。android:id属性可以在ImageView代码中被提交处理。可以等一会儿在R.layout.imageview中使用@+id/<name>句法来给ImageView赋值一个识别符:
android:id="@+id/imageview"

本行插入一个以imageview命名,自动产生的ID,@+id到R.java内。

    下两个你必须定义的属性是:android:layout_width和android:layout_height。这些属性控制图片如何填充屏幕。有两个可选择的选项。fill_parent值定义全部显示图片,wrap_content显示定义的图片尺寸,可能会丢失图像清晰度。本例中使用wrap_content:
android:layout_width="wrap_content"
android:layout_height="wrap_content"

    最后一个需要赋值的属性是最重要的变量型的属性:android:src.这个属性指向你要显示的图片。例如,指向属性到drawable/helloworld图片:

android:src="@drawable/helloworld"
Your full ImageView tag should look like this:
<ImageView android:id="@+id/imageview"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/helloworld"
/>

    最后,在图像显示前,你必须把main.xml通过setContentView传递到HelloWorldImage.java中:
setContentView(R.layout.main);
    编译并运行HelloWorldImage。

    在本章结束前,再试一下另外一件事。回到main.xml中并且把wrap_content改成fill_parent。完成后,你的main.xml文件应当如下:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android=http://schemas.android.com/apk/res/android
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<ImageView android:id="@+id/imageview"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:src="@drawable/helloworld"
/>
</LinearLayout>
    再次运行程序来检查wrap_content和fill_parent之间的不同之处。

使用TextView和ImageView

    使用一些在本章学到的技巧和技术来创建一个新的Hello World!应用程序。创建一个即用TextView也用ImageView的程序,图片放在屏幕上并且带有一个文本的标题。这个比在一个Activity中使用一个View多一点难度。多用Views看看你能创建什么。

    下一章还会待在Hello World!上,不过还讨论命令行编程。

问专家

Q:Android和大多数的APIs一样有Label或者LabelView可以用吗?

A:没有。所有的文本显示通过TextView显示。你可以,和其他人一样,自定义一个和Label功能的View,并把它命名为LabelView,但是Android本身并没有LabelView这个包装。

Q:有任何的优点使用<应用程序>.java,而不是main.xml来创建Views吗?

A:没有文件说速度或者处理器方面的二者之间的差别,但是一个关键的优点是,使用main.xml,需要为你的Activity预先确定一组Views 。然后,在编码中,你可以从一个View跳到另外一个View,而不需要手动创建它们。 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics