`

Android开发之又见Hello World!

阅读更多

量变产生质变,如果你从第一篇一直看到了这篇,可以说这就是你的质变点之一。

回顾及展望

经过数篇对Android应用程序的原理的讲述,现在我们大概回顾一下。

至此,我们终于算是完全算是双脚步入Android开发的大门了,但我们现在还只能算是金字塔底端的那群人,还需要不断地实践、实践、再实践。而且上面所讲的是作为一个真正Android开发人员必须要深刻理解的东西,如果您还没有达到深刻的程度那请你回去再浏览一遍,然后跟着我的这个系列继续深入学习,在接下来的文章我将更多的是利用实例来解析这些东西。下面我再次用Hello World程序来分析一下Android应用程序,主要内容如下:

  • “Hello World!”显示浅析
  • “Hello World!”的手术(一)
  • “Hello World!”的手术(二)
  • “Hello World!”的手术(三)

1、“Hello World!”浅析

首先我们再次简单地新建一个Hello World项目,它的布局文件res\layout\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="@string/hello"
    />
</LinearLayout>
元素<TextView>的android:text就是我们在屏幕上显示的“Hello World, HelloWorld!”,android:text的值是“@string/hello”,它是如何在屏幕上显示“Hello World, HelloWorld!” 的呢?。

在main.xml文件中以这种格式:
@[package:]string/some_name (where some_name  is the name of a specific string)
引用res/values/strings.xml文件中的字符串,其中some_name是要引用的字符串的名字。strings.xml文件代码如下:
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="hello">Hello World, HelloWorld!</string>
    <string name="app_name">HelloWorld</string>
</resources>
由此可见,上面那个<TextView>的android:text引用的字符串是“Hello World, HelloWorld!”。接着想象一下,“Hello World, HelloWorld!”何时加载显示的呢?

Note:这种<TextView>的text的值是存储在strings.xml中的,而不是硬编码的。这样的好处是,当我们在strings.xml中修改hello的具体值时,不需要在main.xml中修改。

我们来看下src目录下skynet.com.cnblogs.www包(就是新建Hello World项目时定义的包名)中的HelloWorld.java文件,代码如下:
package skynet.com.cnblogs.www;

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

public class HelloWorld extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    }
}
可以看出在创建活动时,即void onCreate(Bundle saveInstanceState)中,在HelloWorld中重写了它,在该方法中首先调用了父类的onCreate方法且接着调用了setContentView(R.layout.main)方法。是的,就是在这个方法中,根据main.xml文件将其显示出来,因为R.layout.main是表示布局资源文件main.xml编译后的对象,Eclipse插件会自动在R.java文件中创建这个引用。main.xml中定义了<TextView>,然后根据它的android:text属性引用到strings.xml文件中的<string name="hello">Hello World, HelloWorld!</string>元素,然后将它显示到屏幕上。

活动的生命周期可以知道,任何一个活动启动的一个方法是onCreate()方法,在这里做一些初始化的工作,诸如创建视图、绑定数据列表等。在HelloWorld项目中,就是调用setContentView进行初始化工作,将Hello World, HelloWorld!显示到屏幕上。

至此,我们对Hello World的认识更加深入了一点!下面我们让拿起手术刀对它进行一个手术。

2、Hello World的手术(一)

我们将main.xml文件中的<TextView>元素删掉,取而代之用一个Button来显示“Hello World!”。代码如下:
<?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"
    >
<Button
android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:text="@string/hello"
    />
</LinearLayout>
其它的地方不用修改,直接运行即可!

 

图1、修改之前的 

            

ButtonHelloWorld

图2、修改之后的

从这个例子我们可以看出我们上节的分析是对的,接下来我们继续对它做一个手术。

3、Hello World的手术(二)

我们这次不用Button来显示“Hello World!”,我们这次用一个图片来显示。首先我们准备一张png的图片,如下:hello

图3、hello.png

接下来我们将它复制到, res/drawable-dhpi中。然后我们查看R.java文件我们会发现,R中自动加了一行:(关于R文件,你可以参考Android 开发之旅:HelloWorld项目的目录结构中的1.2、gen文件夹
/* 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 skynet.com.cnblogs.www;

public final class R {
    public static final class attr {
    }
    public static final class drawable {
        public static final int hello=0x7f020000;//这行是Android自动新加的
        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=0x7f040001;
        public static final int hello=0x7f040000;
    }
}

 

drawable- hdpi、drawable- mdpi、drawable-ldpi的区别:

(1)drawable-hdpi里面存放高分辨率的图片,如WVGA (480x800),FWVGA (480x854)

(2)drawable-mdpi里面存放中等分辨率的图片,如HVGA (320x480)

(3)drawable-ldpi里面存放低分辨率的图片,如QVGA (240x320)

系统会根据机器的分辨率来分别到这几个文件夹里面去找对应的图片。

 

删除刚才我们添加的<Button>元素,添加一个<ImageView>元素。
<?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="wrap_content"
    android:layout_height="wrap_content"
    android:src="@drawable/hello"
/>
</LinearLayout>
运行之后,结果如下所示:

hello 图4、图片显示Hello World

我们看到上面的ImageView有一个id属性。其实,每个View对象都有一个关联的ID,来唯一标识它。当应用程序被编译时,这个ID作为一个整数引用。但是ID通常是在布局XML文件中作为字符串分配的,在元素的id属性。这个XML属性对所有的View对象可用且会经常用到。XML中的ID语法如下:android:id="@+id/my_button"

字符串前的@符号表示XML解析器应该解析和扩展剩下的ID字符串,并把它作为ID资源。+符号表示这是一个新的资源名字,它必须被创建且加入到我们的资源(R.java文件,R是Resource)。Android框架提供一些其他的ID资源。当引用一个Android资源ID时,你不需要+符号,但是你必须添加android包名字空间,如下:android:id="@android:id/empty"

4、Hello World的手术(三)

上面两个手术都是基于main.xml的,在布局资源文件中声明相应的控件并设置相关属性,如TextView、Button、ImageView等,然后在onCreate()方法中调用setContentView(R.layout.main)方法来输出。其实上面的几个实验我们都可以编程地进行,下面就以编程地用ImageView显示“Hello World!”,别的也是类似来完成。

首先,我们将main.xml文件中的<ImageView>删掉,且将res/values/strings.xml中的<string name="hello">Hello World, HelloWorld!</string>删掉(其实第3节,用图片显示就没有用到它);然后,在HelloWorld.java文件中 import android.widget.ImageView;且删掉onCreate()方法中调用setContentView(R.layout.main)方法,因为我们不需要根据main.xml布局资源文件来显示而是编程地Hello World。

接下来我们在onCreate()方法中声明一个ImageView对象,并设置它的图像资源,最后将这个ImageView对象传给setContentView()方法,代码如下:
package skynet.com.cnblogs.www;

import android.app.Activity;
import android.os.Bundle;
import android.widget.ImageView;

public class HelloWorld extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        ImageView imageHello=new ImageView(this);
        imageHello.setImageResource(R.drawable.hello);
        setContentView(imageHello);
    }
}
运行之后,同样会得到Hello World的手术(二)的结果,只是图片的显示位置不太一样。在这里注意上面那行粗体代码,如果是TextView或者Button的话,应该调用setText()方法来设置”Hello World!”。

image图5、编程地显示Hello World!

Note:构建ImageView对象时传递了一个this参数,表示与当前上下文(context)关联。这个Context由系统处理,它提供诸如资源解析、获取访问数据库和偏好等服务。因为Activity类继承自Context,且因为你的HelloWorld类是Activity的子类,它也是一个Context。因此,你可以传递this作为你的Context给ImageView引用。

默认HelloWorld
分享到:
评论

相关推荐

    Android 开发环境搭建和HelloWorld程序

    本文将详细讲解Android开发环境的搭建过程以及编写第一个"HelloWorld"程序的方法,非常适合初次接触Android开发的朋友。 一、Android开发环境搭建 1. 安装Java Development Kit (JDK) - JDK是开发Android应用的...

    我的Android开发之helloworld

    《我的Android开发之HelloWorld》 在Android开发的初期阶段,每个开发者都会经历编写第一个程序——"Hello, World!"的过程。这个简单的应用是学习任何编程语言的传统起点,它标志着我们开始探索新领域的第一步。...

    笨鸟学Android开发(1):HelloWorld

    在这个“笨鸟学Android开发(1):HelloWorld”的教程中,我们将学习如何创建一个简单的Android应用,显示经典的"Hello, World!"信息。 首先,你需要安装Android Studio。这是一个功能强大的开发工具,包含了代码...

    实验一Android开发环境搭建与Helloworld.doc

    Android开发环境搭建与Helloworld Android开发环境搭建是Android应用开发的基础, Android开发环境的搭建包括安装Java JDK、下载Eclipse、安装ADT(Android Development Tools)、安装Android SDK、安装手机USB...

    Android开发入门 实例 helloworld

    在Android开发领域,"Hello, World!"项目是一个经典的起点,它为初学者提供了一个简单而直接的编程体验,帮助他们理解和熟悉Android应用的基本构建过程。本文将深入探讨这个入门实例,带您逐步走进Android开发的世界...

    Android demo Android helloworld

    在Android开发领域,"Android demo Android helloworld"通常是指初学者入门的第一个小程序,它标志着开发者在Android平台上迈出了第一步。这个简单的程序展示了如何在Android设备上显示“Hello, World!”的文字,是...

    Android开发之旅

    Android 开发之旅:又见Hello World!11 Android 开发之旅:深入分析布局文件&又是“Hello World!” 12 Android 开发之旅:view的几种布局方式及实践 13 Android 开发之旅:短信的收发及在android模拟器之间实践...

    Android命令行开发环境搭建和HelloWorld Project

    通过以上步骤,你已经在命令行环境下成功地搭建了Android开发环境,并创建了一个简单的"HelloWorld"项目。熟悉这些命令和流程对于提升Android开发效率非常有帮助,尤其是在处理自动化任务时。继续学习和实践,你将...

    Android Hello World工程项目

    在Android开发领域,"Hello, World!"项目是每个新手开发者接触的第一个工程,它标志着学习旅程的开始。这个“Android Hello World 工程项目”旨在帮助初学者理解Android应用的基础架构和开发环境。在这个项目中,...

    Android开发之旅:HelloWorld项目的目录结构

    在早期版本的Android开发中,可能需要特定版本的库文件来支持某些功能。 4. **assets 文件夹**:这个文件夹用于放置原始的非编译型资源,如文本文件、音频文件、JSON数据等。这些文件在运行时可以通过AssetManager...

    android helloWorld程序

    在Android开发领域,"HelloWorld"程序是每个初学者入门时的第一个项目,它标志着你在Android编程之旅的起点。这个简单的程序旨在教你如何在Android环境中创建并运行一个基本的应用。让我们详细了解一下这个过程以及...

    android_helloworld

    在Android开发领域,"Hello, World!"程序是一个经典的入门示例,它标志着开发者开始接触并学习这个平台。本文将深入探讨“android_helloworld”项目,理解Android应用的基础结构,以及如何在Android Studio中创建和...

    Android HelloWorld程序

    在Android开发领域,"HelloWorld"程序是每个初学者入门时的第一个接触点,它标志着开发者在Android世界中的第一次正式亮相。这个程序虽然简单,但却是理解Android应用开发基础的重要起点。接下来,我们将深入探讨...

    android 写的hello world 源码

    在Android开发领域,"Hello, World!"程序是入门学习的经典示例。这个程序通常用于演示基本的编程概念和Android Studio的使用。以下是关于这个主题的详细知识点: 1. **Android平台**:Android是由Google领导的开放...

    hello world _android

    在Android开发领域,"Hello World"程序是每个初学者入门时的第一个项目,它标志着开发者向Android编程世界的迈进。"hello world _android"这个标题暗示我们将深入探讨如何在Android环境中创建并运行一个简单的"Hello...

    实验一android开发环境搭建与helloworld.pdf

    Android开发环境搭建与Hello World应用开发 Android开发环境搭建是Android应用开发的第一步,搭建好开发环境后,我们可以开始开发自己的Android应用程序。本实验主要介绍如何搭建Android开发环境,安装Java JDK,...

    Android版得HelloWorld

    在Android开发领域,"HelloWorld"程序是每个初学者入门时的第一个项目,它标志着你在Android编程之旅的起点。这个简单的程序通常包含一个显示"Hello, World!"文本的屏幕,帮助开发者熟悉基本的环境配置和代码编写...

    使用Android Studio开发HelloWorld应用程序

    使用 Android Studio 开发 HelloWorld 应用程序 Android Studio 是 Google 官方推出的集成开发环境(IDE),专门为 Android 应用程序开发设计。使用 Android Studio 可以快速创建、编译、调试和优化 Android 应用...

    android第一个程序hello world 的编写视频教程

    本教程将带你逐步了解如何在Android环境中创建你的第一个"Hello World"程序,通过网易公开课中的视频教学资源,由经验丰富的讲师引导,帮助你扎实地建立起Android开发的基础。 首先,你需要安装Android Studio,这...

Global site tag (gtag.js) - Google Analytics