0 Comments

ActivityGroup

发布于:2012-11-21  |   作者:广州网站建设  |   已聚集:人围观
Activity的高级应用

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,代码如下:

广州网站建设
  1. activity1.xml  
  2. <?xml version="1.0" encoding="utf-8"?> 
  3. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
  4.     android:orientation="vertical" android:layout_width="fill_parent" 
  5.     android:layout_height="fill_parent"> 
  6.     <Button android:layout_width="fill_parent" 
  7.         android:layout_height="wrap_content" android:text="Activity1" android:onClick=   
  8.         "onClick_Activity1" /> 
  9. </LinearLayout> 
  10. activity2.xml  
  11. <?xml version="1.0" encoding="utf-8"?> 
  12. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
  13.     android:orientation="vertical" android:layout_width="fill_parent" 
  14.     android:layout_height="fill_parent"> 
  15.     <Button android:layout_width="fill_parent" 
  16.         android:layout_height="wrap_content" android:text="Activity2" android:onClick=  
  17.         "onClick_Activity2" /> 
  18. </LinearLayout> 
  19. activity3.xml  
  20. <?xml version="1.0" encoding="utf-8"?> 
  21. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
  22.     android:orientation="vertical" android:layout_width="fill_parent" 
  23.     android:layout_height="fill_parent"> 
  24.     <Button android:layout_width="fill_parent" 
  25.         android:layout_height="wrap_content" android:text="Activity3" android:onClick=  
  26.         "onClick_Activity3" /> 
  27. </LinearLayout> 

从上面的代码可以看出,这3个布局文件中都包含了一个按钮,如果要将这3个Activity都放在一个Activity上显示,就会出现3个按钮。下面来看一下主界面的布局文件。

广州网站建设
  1. main.xml  
  2. <?xml version="1.0" encoding="utf-8"?> 
  3. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
  4.     android:orientation="vertical" android:layout_width="fill_parent" 
  5.     android:layout_height="fill_parent"> 
  6.     <LinearLayout android:id="@+id/header" android:orientation="vertical" 
  7.         android:layout_width="fill_parent" android:layout_height="120dp"> 
  8.     </LinearLayout> 
  9.     <LinearLayout android:id="@+id/body" android:orientation="vertical" 
  10.         android:layout_width="fill_parent" android:layout_height="fill_parent" 
  11.         android:layout_weight="1"> 
  12.     </LinearLayout> 
  13.     <LinearLayout android:id="@+id/footer" android:orientation="vertical" 
  14.         android:layout_width="fill_parent" android:layout_height="100dp" 
  15.         android:layout_gravity="bottom"> 
  16.         <Button android:layout_width="fill_parent" 
  17.             android:layout_height="wrap_content" android:onClick="onClick_Footer_Button" 
  18.             android:text="Footer_Button" /> 
  19.     </LinearLayout> 
  20. </LinearLayout> 

从main.xml文件中可以看出,在最顶层的<LinearLayout>标签中包含了3个<LinearLayout>标签,在后面的程序中会将Activity1、Activity2和Activity3分别添加到这3个<LinearLayout>标签中,在最后一个<LinearLayout>标签中有一个<Button>标签,因此,屏幕最后应为4个按钮。添加Activity的主程序代码如下:

广州网站建设
  1. package mobile.android.ch09.activitygroup;  
  2.  
  3. import android.app.ActivityGroup;  
  4. import android.content.Intent;  
  5. import android.os.Bundle;  
  6. import android.view.View;  
  7. import android.widget.LinearLayout;  
  8. import android.widget.Toast;  
  9.  
  10. public class Main extends ActivityGroup  
  11. {  
  12.     @Override  
  13.     public void onCreate(Bundle savedInstanceState)  
  14.     {  
  15.         super.onCreate(savedInstanceState);  
  16.         setContentView(R.layout.main);  
  17.         LinearLayout header = (LinearLayout) findViewById(R.id.header);  
  18.         LinearLayout body = (LinearLayout) findViewById(R.id.body);  
  19.         LinearLayout footer = (LinearLayout) findViewById(R.id.footer);  
  20.         //  获得Activity1中的顶层视图  
  21.         View activity1 = getLocalActivityManager().startActivity("activity1",  
  22.                 new Intent(Main.this, Activity1.class)).getDecorView();  
  23.         //  获得Activity2中的顶层视图  
  24.         View activity2 = getLocalActivityManager().startActivity("activity2",  
  25.                 new Intent(Main.this, Activity2.class)).getDecorView();  
  26.         //  获得Activity3中的顶层视图  
  27.         View activity3 = getLocalActivityManager().startActivity("activity3",  
  28.                 new Intent(Main.this, Activity3.class)).getDecorView();  
  29.         //  将Activity1添加到第一个<LinearLayout>标签中  
  30.         header.addView(activity1);  
  31.         //  将Activity2添加到第二个<LinearLayout>标签中  
  32.         body.addView(activity2);  
  33.         //  将Activity3添加到第三个<LinearLayout>标签中  
  34.         footer.addView(activity3);  
  35.     }  
  36.     public void onClick_Footer_Button(View view)  
  37.     {  
  38.         Toast.makeText(this, "Footer_Button", Toast.LENGTH_LONG).show();  
  39.     }  
  40. }  

运行上面的代码,显示效果如图9.12所示。

图9.12  同时显示多个Activity
飞机