Android中的Activity组件,可以简单地看成一个界面(或用户接口UI或可视化界面),它提供使用者一个交互式的接口。一个应用程序可以包含多个Activity,例如一个Email程序可能有三个Activity:邮件列表Activity、显示邮件内容的Activity、编辑邮件的Activity。 所有Activity在系统中由Activity堆栈进行管理,当一个新的Activity被执行后,它将会被放置到堆栈的最顶端,成为当前活动的Activity,而先前的Activity原则上还是存在于堆栈中,但它此时不会在前台。
每个Activity可以通过setContentView()方法将布局呈现出来,如:setContentView(R.layout.main);
每个Activity都是通过继承和扩展基类Activity实现的。所有应用的Activity都继承于android.app.Activity基类,通过重载(Override)父类的方法来实现各种需要的功能。
示例工程StartActivityDemo,将实现简单的Activity跳转,即从一个Activity切换至另一个Activity。
// 主Activity文件
package com.example.startactivitydemo;
import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.my_layout);
/* 绑定控件并且添加监听接口的事件处理 */
findViewById(R.id.btnStartAnotherAty).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) { // 处理单击事件, 参数v为事件发生的事件源
// TODO Auto-generated method stub
startActivity(new Intent(MainActivity.this, AnotherAty.class));
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
主Activity文件中,布局文件my_layout代码如下:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<Button
android:id="@+id/btnStartAnotherAty"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="启动另一个Activity" />
</LinearLayout>
第二个Activity文件代码如下:
// 第二个Activity文件
package com.example.startactivitydemo;
import android.app.Activity;
import android.os.Bundle;
public class AnotherAty extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_another_aty);
}
}
第二个Activity文件中,布局文件activity_another_aty代码如下:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_marginTop="77dp"
android:textSize="30sp"
android:text="这是另一个Activity" />
</RelativeLayout>
实现多个Activity间的切换,每个Activity都要在AndroidMainifest.xml文件中说明,该文件定义了应用程序的整体布局、提供的内容与动作、描述程序的信息(如名字、服务、数据处理、版本、图标等)、Activity以及intent filter动作等,是应用程序的重要组成文件。
本工程的AndroidMainifest.xml完整代码如下(只需编写android:name=".AnotherAty"所在的Activity标记的内容即可):
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.startactivitydemo"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="17" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.example.startactivitydemo.MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".AnotherAty"
android:label="AnotherAty" >
</activity>
</application>
</manifest>
完成以上过程,运行在虚拟仿真器AVD(Android Virtual Device)中,单击Button按钮即可跳转。