Android SDK还支持一些比较高级的应用,例如,可以通过ActivityGroup将多个Activity放在一个Activity中显示、自定义半透明窗口以及Activity之间的切换动画等。
广州网站建设
1 ActivityGroup
工程目录:src\ch09\ch09_activitygroup
ActivityGroup是Activity的子类,通过ActivityGroup可以将多个Activity放到一个Activity上显示,这样可以单独实现屏幕的某些部分,然后将它们组合在一起。ActivityGroup的关键是通过LocalActivityManager. startActivity方法获得Activity的最顶层窗口(Window对象),再通过Window. getDecorView方法获得窗口的最顶层视图。
现在来准备3个Activity(Activity1、Activity2和Activity3),这3个Activity使用的布局文件分别为activity1.xml、activity2.xml和activity3.xml,代码如下:
广州网站建设
- activity1.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">
- <Button android:layout_width="fill_parent"
- android:layout_height="wrap_content" android:text="Activity1" android:onClick=
- "onClick_Activity1" />
- </LinearLayout>
- activity2.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">
- <Button android:layout_width="fill_parent"
- android:layout_height="wrap_content" android:text="Activity2" android:onClick=
- "onClick_Activity2" />
- </LinearLayout>
- activity3.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">
- <Button android:layout_width="fill_parent"
- android:layout_height="wrap_content" android:text="Activity3" android:onClick=
- "onClick_Activity3" />
- </LinearLayout>
从上面的代码可以看出,这3个布局文件中都包含了一个按钮,如果要将这3个Activity都放在一个Activity上显示,就会出现3个按钮。下面来看一下主界面的布局文件。
广州网站建设
- 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 android:id="@+id/header" android:orientation="vertical"
- android:layout_width="fill_parent" android:layout_height="120dp">
- </LinearLayout>
- <LinearLayout android:id="@+id/body" android:orientation="vertical"
- android:layout_width="fill_parent" android:layout_height="fill_parent"
- android:layout_weight="1">
- </LinearLayout>
- <LinearLayout android:id="@+id/footer" android:orientation="vertical"
- android:layout_width="fill_parent" android:layout_height="100dp"
- android:layout_gravity="bottom">
- <Button android:layout_width="fill_parent"
- android:layout_height="wrap_content" android:onClick="onClick_Footer_Button"
- android:text="Footer_Button" />
- </LinearLayout>
- </LinearLayout>
从main.xml文件中可以看出,在最顶层的<LinearLayout>标签中包含了3个<LinearLayout>标签,在后面的程序中会将Activity1、Activity2和Activity3分别添加到这3个<LinearLayout>标签中,在最后一个<LinearLayout>标签中有一个<Button>标签,因此,屏幕最后应为4个按钮。添加Activity的主程序代码如下:
广州网站建设
- package mobile.android.ch09.activitygroup;
- import android.app.ActivityGroup;
- import android.content.Intent;
- import android.os.Bundle;
- import android.view.View;
- import android.widget.LinearLayout;
- import android.widget.Toast;
- public class Main extends ActivityGroup
- {
- @Override
- public void onCreate(Bundle savedInstanceState)
- {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- LinearLayout header = (LinearLayout) findViewById(R.id.header);
- LinearLayout body = (LinearLayout) findViewById(R.id.body);
- LinearLayout footer = (LinearLayout) findViewById(R.id.footer);
- // 获得Activity1中的顶层视图
- View activity1 = getLocalActivityManager().startActivity("activity1",
- new Intent(Main.this, Activity1.class)).getDecorView();
- // 获得Activity2中的顶层视图
- View activity2 = getLocalActivityManager().startActivity("activity2",
- new Intent(Main.this, Activity2.class)).getDecorView();
- // 获得Activity3中的顶层视图
- View activity3 = getLocalActivityManager().startActivity("activity3",
- new Intent(Main.this, Activity3.class)).getDecorView();
- // 将Activity1添加到第一个<LinearLayout>标签中
- header.addView(activity1);
- // 将Activity2添加到第二个<LinearLayout>标签中
- body.addView(activity2);
- // 将Activity3添加到第三个<LinearLayout>标签中
- footer.addView(activity3);
- }
- public void onClick_Footer_Button(View view)
- {
- Toast.makeText(this, "Footer_Button", Toast.LENGTH_LONG).show();
- }
- }
运行上面的代码,显示效果如图9.12所示。
![]() |
| 图9.12 同时显示多个Activity |




