天天看点

Android ActivityGroup实现tab功能

android.app包中含有一个activitygroup类,该类是activity的容器,可以包含多个嵌套进来的activitys,这篇文章就是借助activitygroup可以嵌套activity的功能来实现tab功能。tab这种ui在很多的移动应用中可以看到,包括android、iphone、window phone7等移动终端上都有这样的应用,tab这种ui方式具有小视图大容量的特点。

首先,从sdk中doc文档中都可以获知,activitygroup类的父类是activity(见下图),也就是说二者具有相同的接口和生命周期,同activity一样,也有oncreate()、onpause()等函数可供我们重载。

activitygroup中有两个public方法(下图):activitygroup中可以调用getlocalactivitymanage()方法获取localactitymanage来管理activity。

activitygroup实现的tab功能的效果图如下。

Android ActivityGroup实现tab功能
Android ActivityGroup实现tab功能

先看一下java代码:

public class mainview extends activitygroup {

 @suppresswarnings("unused")

 private linearlayout bodyview,headview;

 private linearlayout one, two, three, four;

 private int flag = 0; // 通过标记跳转不同的页面,显示不同的菜单项

    /** called when the activity is first created. */

    @override

    public void oncreate(bundle savedinstancestate) {

        super.oncreate(savedinstancestate);

        setcontentview(r.layout.view_main);

        initmainview();

  // 显示标记页面

  showview(flag);

  one.setonclicklistener(new onclicklistener() {  

   public void onclick(view v) {

    // todo auto-generated method stub

    flag = 0;

    showview(flag);

    }

  });

  two.setonclicklistener(new onclicklistener() {     

    flag = 1;

   }

  three.setonclicklistener(new onclicklistener() {    

    flag = 2;

  four.setonclicklistener(new onclicklistener() {   

    public void onclick(view v) {

     flag = 3;

     showview(flag);

    }

    /*

  * 初始化主界面

  */

    public void initmainview() {

  headview=(linearlayout) findviewbyid(r.id.head);

  bodyview=(linearlayout) findviewbyid(r.id.body);

  one=(linearlayout) findviewbyid(r.id.one);

  two=(linearlayout) findviewbyid(r.id.two);

  three=(linearlayout) findviewbyid(r.id.three);

  four=(linearlayout) findviewbyid(r.id.four);

 }

   // 在主界面中显示其他界面

 public void showview(int flag) {

  switch (flag) {

  case 0:

   bodyview.removeallviews();

   view v = getlocalactivitymanager().startactivity("one",

     new intent(mainview.this, oneview.class)).getdecorview();

   one.setbackgroundresource(r.drawable.frame_button_background);

   two.setbackgroundresource(r.drawable.frame_button_nopressbg);

   three.setbackgroundresource(r.drawable.frame_button_nopressbg);

   four.setbackgroundresource(r.drawable.frame_button_nopressbg);

   bodyview.addview(v);

   break;

  case 1:

   bodyview.addview(getlocalactivitymanager().startactivity("two",

     new intent(mainview.this, twoview.class))

     .getdecorview());

   one.setbackgroundresource(r.drawable.frame_button_nopressbg);

   two.setbackgroundresource(r.drawable.frame_button_background);

  case 2:   

   bodyview.addview(getlocalactivitymanager().startactivity(

     "three", new intent(mainview.this, threeview.class))

   three.setbackgroundresource(r.drawable.frame_button_background);

  case 3:   

     "four", new intent(mainview.this, fourview.class))

   four.setbackgroundresource(r.drawable.frame_button_background);

  default:

  }

}

程序中重要的是如下的方法:

    bodyview.removeallviews();  

    bodyview.addview(getlocalactivitymanager().startactivity("two",  

new intent(mainview.this, twoview.class))  

.getdecorview());  

使用view的removeallviews()方法清除不需要的view,使用addview(view v)方法添加需要的view。

getlocalactivitymanager().startactivity("two",new intent(mainview.this, twoview.class))得到一个window对象,window对象调用

getdecorview()获取view。关于window的方法可以参考android.app.window。

      通过tab的效果图可以看到这个效果使用了上、中、下三种布局,layout就可以这样做了。实现layout就可以实现tab功能了。

继续阅读