HelloWorld程序分析
时间:2010-08-28 来源:fly123456789
项目结构图如下:
这里有几个重要的文件需要记住:
AndroidManifest.xml 这个文件记录了程序一些主要的信息。相关的说明如下所示:
<?xml version="1.0" encoding="utf-8"?>
<!-- 一个独立完整的程序就是在这个以manifest为标头的标签里 ,
package这里定义了程序主运行类的包的路径
versionCode、versionName都是程序版本的说明
-->
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.wellen.helloworld"
android:versionCode="1"
android:versionName="1.0">
<!-- application 标签定义了程序窗口的一些信息:
icon 定义了选择这个程序运行的快捷方式的图标
label 定义了程序的名称
-->
<application android:icon="@drawable/icon" android:label="@string/app_name">
<!-- activity 类似于一个场景,很像web 中的一个页面,
这个是构成android程序的基本模块。是一个非常重要的组件以后会详细讲解
这里的activity对应的就是你代码包里的Helloworld -->
<activity android:name=".Helloworld"
android:label="@string/app_name">
<!-- 这里定义了这个activity 的相关属性,
action 中说明了 当前 这个activity 的作用
这里android.intent.action.MAIN 说明这个Activity 是程序的主界面
category 给出了这个Action的附加信息,
android.intent.category.LAUNCHER 说明了 这个它在所有的程序的最顶层
-->
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
<!-- 这里说明了这个程序运行需要 SDK 的最低版本 -->
<uses-sdk android:minSdkVersion="4" />
</manifest>
我们在查看我们的源代码包内的helloworld 这个类继承Activity 我们查看Helloworld的代码
package com.wellen;
import android.app.Activity;
import android.os.Bundle;
/**
* Activity 这个类很重要,它是我们程序运行的根本。
* 这里我们要重点的理解的是Activity的生命周期。
* 相关的说明请查看 android 的文档
* 上面有详细的介绍Activity的生命周期。
* @author wellen
*
*/
public class Helloworld extends Activity {
/** Called when the activity is first created. */
/**
* 这个方法是在Activity 类对象构造的时候,首先调用的。
*/
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
/**
* 这里调用的是当前的activity 的布局文件,
* 布局文件在项目文档的res/layout 的文件下,
* xml 的文件名为 main.xml
*/
setContentView(R.layout.main);
}
/**
* 这个方法将在当日按的activity的对象变成可见的时候之前调用。
*/
@Override
protected void onStart() {
super.onStart();
}
/**
* 这个方法在用户可以和当前的activity对象交互之前调用
*/
@Override
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();
}
/**
* 当用户要启动其他的activity的时候调用,例如dialog 启动的时候,
* 当前的activity位于 activity 栈的dialog的下方。
* 由于dialog 不能布满全屏幕,这个activity 还是处于可见状态
* 但是activity 又处于不可活动的状态,可能需要保持相关的状态信息
* 这个时候就需要调用这个方法, 来保存当前的状态。方便后来激活的时候,
* 能够准确无误的运行。没有相关的数据差异。
*/
@Override
protected void onPause() {
// TODO Auto-generated method stub
super.onPause();
}
/**
* 当当前的activity 变成不可见的时候
*/
@Override
protected void onStop() {
// TODO Auto-generated method stub
super.onStop();
}
/**
* 这个方法在当前的activity 需要重新启动的时候
*/
@Override
protected void onRestart() {
// TODO Auto-generated method stub
super.onRestart();
}
/**
* 这个方法在当前的activity 不在需要的时候。
* 需要销毁这个activity对象的时候调用
*/
@Override
protected void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
}
}
我们在查看res 文件夹如图所示:
看到上面的文件夹,这里我说明下上面的文件夹里保存文件的作用
drawable 开头的文件夹 保存了当前的程序需要的图片,这里的 hdpi、ldpi、mdpi 是分别保存了一副内容相同的图片不同像素即清晰度。h 是高清晰,l 是低清晰,m 是中等清晰。这样的原因是:android 的手机屏幕 有不一样的分辨率,这样布置了图片就能够 然程序在不同的大小屏幕下运行 不造成因为图片的原因造成程序的布局出现问题。
layout 文件下 保存了 当前程序的不同的activity的布局。
values 文件下保存了程序显示的字符串,这样我们只需要在这里写不通语言的文字,而程序就能够支持国际化了。
下面我们查看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"
>
<!-- 定义了一个文档显示栏 @string/hello 就是引用下面strings.xml 文件下的hello标签所对应的内容 -->
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/hello"
/>
</LinearLayout>
下面我们看看 strings.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- 这里定义了一个字符串 hello-->
<string name="hello">Hello World, Helloworld!</string>
<string name="app_name">ApiLearn</string>
</resources>
下面是程序的运行效果图: