`
wc0903
  • 浏览: 81933 次
  • 性别: Icon_minigender_1
  • 来自: 郑州
社区版块
存档分类
最新评论

第五章 应用:Hello World!——下

阅读更多

还是Hello World!

    本节中,你会创建另一个Hello WorldAndroid应用。然而这次你是用代码编写UI,而不是用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 Worldwide!”的代码。打开HelloWorldText.java文件,移除下面的行:

setContentView(R.layout.main);

本行用setContentView()函数将main.xml文件提到屏幕。因为你不用main.xml文件定义你的TextView,你也不会让它出现在你的视野。相反,你会通过代码构建TextView

下一步是导入从android.widget中导入TextView包。这会让你访问TextView,并让借助它创建你的示例。将这段代码放到HelloWorldText.java文件的顶部, import声明是

import android.widget.TextView;

现在创建一个TextView实例。通过创建TextView实例,你会用它将文本输出到屏幕上而不是直接修改main.xml。在onCreate()声明触发之后,放上下面的代码:

TextView HelloWorldTextView = new TextView(this);

上面一行通过设定一个新的TextView,创建了名为HelloWorldTextViewTextView实例,然后实例化了HelloWorldTextView,新的TextView在这里被实例化了。

现在定义了TextView,你可以在上面添加文本了。下面一行代码就在TextView上设置了“Hello World!”文本。

HelloWorldTextView.setText("Hello World!");

本行设置了你的TextView中的文本。setText()函数让给TextView指定一个字符串。

你已经创建了包含你想要展示的信息的TextView。然而,仅仅在TextView上传递“Hello World!”并不会显示到屏幕上。如前面提到的,你需要设定ContentView向屏幕展示内容。你必须用下面的代码设定TextView内容,并将它展示到屏幕上。

setContentView(HelloWorldTextView);

  研究该行,你会发现你将TextView传递给了setContentView。前三行代码组成了你的Hello World!应用。你创建一个TextView,为它指定文本,然后将它设置到屏幕上。从各方面来看,这一点儿都不复杂。

你的HelloWorldText.java文件的完整内容应该如下:

package android.programmers.guide;

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模拟器中启动应用。下面的插图展示了你的Hello World!应用的结果。

你已经创建了你的第一个完整的Android Activity。这个小项目展示了一个相当普通的Hello World!应用的执行。你为活动的内容视图设定一个TextView,然后向Android模拟器中的手机屏幕显示“Hello World!”信息。下面一节展示一种不同的利用图片执行Hello World!的方式。

使用图像的Hello World!

本节,你会利用Hello World!应用,进一步了解一种相对平常的编程实践:显示图片。没有图形展示,现代的计算机显示器会变得非常无趣。这些图形显示中心能够往屏幕上发送图像。

五年前,手机显示图片非常麻烦。作为现代的PC用户,处理图片是我们习以为常的事情。我们每天都看各种类型的窗口,却不会想到他们其实是发送到屏幕上的图片而已。这个版本的Hello World!应用会在屏幕上显示一个图片来表示“Hello World!”。

对于该应用,利用新建Android项目向导来创建一个新项目,并命名为HelloWorldImage,如下所示:

应用项目创建之后,浏览并从main.xml中移除TextView代码,保证你有一个空项目。如果你不移除这些代码,最后还会是一个基于文本的Hello World!项目。

在你开始写代码之前,你需要一个展示的图片。在图形程序中创建一个小图片。简单起见,我选择Microsoft Paint,但是任何程序都能够为你提供你需要的图片。我用的图片是:

将你的图片命名为helloworld.png,并把它保存到%workspace%/HelloWorldImage/res/

drawable目录。

在你将图片复制到正确的目录之后,刷新项目。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;

}

}

有了一个可以起步的空应用和一个你可以处理的图片,你就可以开始添加你的代码了。你可以从两方面浏览这个应用:基于XMLUI和基于代码的UI

基于代码UI Hello World

假设你能理解HelloWorldText的解决方案,该版本的Helloworld!会非常熟悉。开始你需要导入展示图片的包。而文本显示使用的是TextView,图片显示使用的是ImageView。一次你需要导入ImageView包。如同TextViewImageView也包含在android.widgets:

import android.widgets.ImageView;

导入包后,你可以创建你的ImageView应用然后显示到屏幕上。实例化ImageView与实例化TextView相同;创建一个ImageView实例,使用方法如下:

ImageView HelloWorldImageView = new ImageView(this);

下一行是ImageViewTextView的不同之处。该步骤包含了设定你想显示的内容。在TextView的例子中,你使用setText()TextView的文本设置成“Hello World!”。虽然ImageViewTextView都是从View衍生而来,但他们仍然不同,因此需要不同的方法。很显然,你不会在ImageView中使用setText()。你需要用setImageResource(),来在你的ImageView中设定图片。如下所示,从R.javasetImageResource()的手柄传递helloworld.png。(手柄的语法就是R.drawable.helloworld):

HelloWorldImageView.setImageResource(R.drawable.helloworld);

最后,你必须设定ContentView才能将图片输出到屏幕。如图你对TextView的做法一样,给ContentView传递ImageViewContentView的任务就是将对象输出到屏幕。

setContentView(HelloWorldImageView);

你的HelloWorldImage.java的最终文件如同这样:

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而不是代码。

基于XML UI Hello World

本节为你区分基于XMLUI和基于代码的UI展示图片的流程,进行了很好的比较。就像你看到的一样,使用main.xml向屏幕发送图片的流程,和使用基于代码的UI,需要的代码量大体相当。然而这两种流程的语法不同。

通过同一个项目的最后一个例子,从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的定义。从给你的main.xml文件添加空的ImageView标签开始:

<ImageView

/>

你需要编辑ImageView的四个属性:android:idandroid:layout_widthandroid:layout_height、和android:src。你把这些属性放到标签中,他们会控制标签在屏幕上的现实方式。

android:id属性是设置ImageView的标识。android:id属性用来和你的代码中的ImageView关联。使用@+id/<name>语法给ImageView配置一个可以在以后使用R.layout.imageView纠正的标识:

android:id="@+id/imageview"

这一行是插入一个自动生成的id@+id,插入到在名字imageview下的R.java文件。

下面两个你必须定义的属性是:layout_widthlayout_height。这些属性控制图片填充屏幕的方式。当为这些属性分配值时,有两个选项可以选择。fill_content值在可见范围内使图片填充屏幕。wrap_content值保持图片的原始大小,可能处理时会失去一些图片精确度。例如,使用wrap_content

android:layout_width="wrap_content"

android:layout_height="wrap_content"

最后的属性你需要分配的是相对最重要的:android:src。这个属性指定你想在视图中显示的图片。例如,将该属性指定为drawable/helloworld图片:

android:src="@drawable/helloworld"

你的整个ImageView标签应该像这样:

<ImageView android:id="@+id/imageview"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:src="@drawable/helloworld"

/>

最后,在图片显示到视图之前,你必须将main.xml传递到HelloWorldImage.java中的setContentView

setContentView(R.layout.main);

编译并运行HelloWorldImage。结果如下面的插图所示:

在你结束本章前,再做一件事。回到main.xml,将层从warp_content变成fill_content。当你结束时,你的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_contentfill_content之间的差别。你的新应用运行时,应该如下所示:

下一节从命令行编程出发,会对Hello World!应用做进一步的研究。

 

 

专家答疑

问:Android是否像其它大部分API一样,拥有一个label或者LabelView吗?

答:没有。所有文本都是通过TextView定义的。你可以像一些人一样,创建一个自定义的如同label功能的View,并将其命名为LabelView

问:通过<application>.java来创建视图main.xml有优势吗?

答:当在用一个创建其它文件时没有记载或过程文件的时候,就会有一个关键优势:使用main.xml,你会有大量的预定义的Activity视图。然后再你的代码中,你可以根据所需从一个视图跳到另一个视图,而不用人工编码创建。

0
0
分享到:
评论

相关推荐

    Hello,World!

    "Hello, World!" 是编程世界的传统起点,是...尽管每种语言的语法和实现方式不同,但目标都是相同的——在屏幕上显示 "Hello, World!"。学习这些示例有助于理解编程语言的基础概念,包括变量定义、输出功能和控制流程。

    最佳QT教程--我见过最好的教程

    第五章:组装积木 —— 介绍了如何使用 Qt 的容器类管理用户界面组件。 第六章:组装丰富的积木! —— 介绍了如何使用 Qt 的布局管理器和容器类创建复杂的用户界面。 第七章:一个事物领导另一个 —— 介绍了如何...

    Hello World! Computer Programming for Kids and Other Beginners

    《Hello World! 计算机编程入门指南》一书旨在为儿童和其他初学者提供一个轻松、有趣且易于理解的计算机编程学习平台。本书由Warren Sande与Carter Sande共同编写,Manning出版社出版,是一本PDF格式的电子书籍。在...

    用MTC89c51控制LCD1602屏使其第一行显示“lLOVE MCU”字样,在其第二行显示“Hello World! ”字样

    在本文中,我们将深入探讨如何使用MCS-51系列的单片机——MTC89C51来控制LCD1602显示器,以显示特定的文本内容。LCD1602是一种常见的液晶显示屏,通常用于嵌入式系统中的数据显示,具有16列和2行的显示能力。我们将...

    Vue预习课2:Hello World 第一个程序

    本课程的核心是通过“Hello World”实例来引导初学者理解Vue的基本概念和设计思想。 首先,让我们从“Hello World”程序开始。这是每个开发者学习新语言或框架时的入门步骤。在Vue中,创建“Hello World”程序非常...

    JAVA程序教学设计: JAVA基本语法——商场购物清单打印.doc

    - 字符串常量:用双引号括起,例如"HelloWorld"。 - 布尔常量:true和false。 - null常量:表示对象引用为空。 6. **变量**: - 变量是存储数据的内存单元,如`int x = 0, y;`定义了两个变量x和y。 - 数据类型...

    一分钟“掌握”常见编程语言

    在编程世界中,"Hello World!" 是初学者入门时最常遇到的第一个程序,它标志着编程旅程的开始。本文将深入探讨这些常见编程语言——Python、Java、C、Matlab、JavaScript、PHP 和 Swift,如何通过简单的代码实现这个...

    HelloWorldApp_hellowword_world_

    标题中的"HelloWorldApp_hellowword_world_"暗示了一个经典的编程入门示例——“Hello, World!”程序。这个程序通常在初学者接触新编程语言时使用,以展示如何编译、运行一个简单的程序并打印出“Hello, World!”这...

    学通C语言的24堂课高清PDF及光盘内容

    - **第5堂课:流程控制** —— 介绍条件语句(if-else)和循环语句(for、while、do-while)的使用。 3. **函数** - **第6堂课:函数定义与调用** —— 解释函数的作用、定义方法,以及参数传递机制。 - **第7堂...

    Fortran 入门教程之Hello world.pdf

    ### Fortran 入门教程之Hello world ...至此,您已经成功编写、编译并运行了第一个Fortran程序——“Hello, World!”。这不仅标志着您对Fortran的基本了解,也为进一步学习和探索更复杂的程序打下了坚实的基础。

    张志晨老师之《则表达式去空格》

    // 输出:"HelloWorld!" ``` 这里的正则表达式`[\s\n]`匹配任何空白字符(包括空格和换行符),`/g`标志表示全局匹配。 #### 四、其他常见用法 ##### 1. 使用split和join去除空格 除了使用`replace`方法外,还...

    package-helloworld:Hello World 简单包

    至于压缩包子文件的文件名称列表——"package-helloworld-master",这很可能是一个Git仓库的主分支(master)的克隆。在GitHub等代码托管平台上,"master"通常是默认的分支,包含了项目的最新稳定代码。因此,下载的...

    单片机应用系统设计技术——实验1:仿真第一个程序Hello World!

    Proteus7.8+Keil5——仿真第一个程序Hello World下载Proteus7.8和Keil5这里我采用的是C代码运行结果如下`注意`:“`Proteus里面的C51单片机的晶振要设置成11.0592,否则Virtual Terminal会运行不出结果“` ...

    Linux学习系列二:运行Hello World .pdf

    本文是“Linux学习系列”的第二篇,旨在深入探讨如何在Linux环境下运行一个经典的入门程序——“Hello World”。第一篇文章《Linux学习系列一:开发环境搭建》受到了广泛关注,激发了许多读者的兴趣。本篇将继续沿着...

    程序员的第一课.txt

    在命令行中输入`javac HelloWorld.java`,如果没有任何错误,则会生成一个名为`HelloWorld.class`的字节码文件。 3. **运行程序**:使用Java解释器`java`运行编译后的字节码文件。在命令行中输入`java HelloWorld`,...

    helloworldkotlin:Hello world和使用Kotlin的一些随机功能

    在编程世界中,"Hello, World!"程序是每个新手程序员的第一个里程碑。Kotlin,作为一款由JetBrains开发的现代、类型安全的编程语言,已经逐渐成为Android开发的首选语言。这个名为"helloworldkotlin"的项目,正如其...

    csapp大作业hello的自白——hello程序的一生

    #### 第5章:链接 - **链接的概念与作用**: - 链接是将多个目标文件和库文件合并为一个可执行文件的过程。 - 这一过程还负责解决符号引用等问题。 - **在Ubuntu下链接的命令**: - 使用命令`gcc hello.o -o ...

    国王MM-无和谐生活的喜悦-第1部分,PIC32MM“ Hello World!”

    在这个第一部分中,作者可能引导读者通过编写第一个简单的程序——"Hello World!"来介绍该平台。 描述中的“使用C++和汇编语言对Microchip PIC32MM单片机进行编程”表明教程涵盖了两种编程语言:C++和汇编。C++是一...

    android应用开发详解 郭宏志编著 pdf格式

    **第五章:Android基本程序单元Activity** - **Activity生命周期**:详解Activity的各个生命周期状态及其回调函数。 - **启动模式**:解释四种不同的启动模式(standard、singleTop、singleTask、singleInstance)...

    COMP107x:Hello World-Android应用程序

    标题中的"COMP107x: Hello World-Android应用程序"是指一个在线课程,该课程主要教授如何开发Android平台上的基础应用程序。"Hello World"通常是一个编程初学者接触的第一个程序,它标志着新学习者向编程世界的初步...

Global site tag (gtag.js) - Google Analytics