`

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。

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() {
public void onClick(View v) {
// TODO Auto-generated method stub
flag = 1;
showView(flag);
}
});
three.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
// TODO Auto-generated method stub
flag = 2;
showView(flag);
}
});
four.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
// TODO Auto-generated method stub
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.removeAllViews();
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);
three.setBackgroundResource(R.drawable.frame_button_nopressbg);
four.setBackgroundResource(R.drawable.frame_button_nopressbg);
break;
case 2:
bodyView.removeAllViews();
bodyView.addView(getLocalActivityManager().startActivity(
"three", new Intent(MainView.this, ThreeView.class))
.getDecorView());
one.setBackgroundResource(R.drawable.frame_button_nopressbg);
two.setBackgroundResource(R.drawable.frame_button_nopressbg);
three.setBackgroundResource(R.drawable.frame_button_background);
four.setBackgroundResource(R.drawable.frame_button_nopressbg);
break;
case 3:
bodyView.removeAllViews();
bodyView.addView(getLocalActivityManager().startActivity(
"four", new Intent(MainView.this, FourView.class))
.getDecorView());
one.setBackgroundResource(R.drawable.frame_button_nopressbg);
two.setBackgroundResource(R.drawable.frame_button_nopressbg);
three.setBackgroundResource(R.drawable.frame_button_nopressbg);
four.setBackgroundResource(R.drawable.frame_button_background);
break;
default:
break;
}
}
}

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

         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功能了。

  • 大小: 21.3 KB
  • 大小: 21.6 KB
  • 大小: 4.4 KB
分享到:
评论

相关推荐

    ActivityGroup实现tab功能

    ActivityGroup是Android早期版本(API Level 8及以下)中实现Tab功能的一种方式,它允许在一个单一的Activity中嵌套多个子Activity。在本文中,我们将深入探讨如何使用ActivityGroup来实现Tab功能,以及它的工作原理...

    gridview+activityGroup实现tab分页

    总之,虽然`ActivityGroup`+`GridView`的组合在旧版Android开发中常见,但现代Android开发中,应优先选择`Fragment`和`ViewPager`等组件来实现Tab分页和页面滑动效果。这样不仅代码更简洁,而且能充分利用Android...

    Android之ActivityGroup实现Tab分页标签

    - ViewPager配合FragmentPagerAdapter或FragmentStatePagerAdapter可以轻松实现Tab分页效果,而且更容易维护和扩展。 6. **注意事项** - ActivityGroup存在一些已知的问题,例如内存泄漏、回退栈管理复杂、与...

    Android代码-TabHost内嵌ActivityGroup界面管理源码.zip

    ActivityGroup则是在早期版本的Android系统中用来管理多个Activity在同一个父Activity内部进行切换的技术,它允许在一个View里展示多个Activity,从而实现类似Tab的效果。 **TabHost详解:** TabHost是Android SDK...

    小程序源码 辅助类库 TabHost内嵌ActivityGroup界面管理源码.rar

    在Android应用开发中,TabHost和ActivityGroup是两个重要的组件,它们主要用于实现多标签页的界面管理。在本文中,我们将深入探讨这两个组件的工作原理、使用方法以及它们如何结合在一起构建一个小程序源码。 ...

    Android TabHost内嵌ActivityGroup界面管理源码.rar

    这份源码的学习价值在于理解Android早期版本中的多页面管理方式,以及如何在TabHost中嵌套ActivityGroup实现复杂界面。虽然现代Android开发更倾向于使用Fragment和FragmentTransaction,但是理解这些老的组件可以...

    AndroidTabHost内嵌ActivityGroup界面管理源码.zip

    将TabHost与ActivityGroup结合使用,主要是为了在一个TabHost的各个标签下展示不同的ActivityGroup,从而实现每个Tab下的多级导航。下面是一些关键步骤: 1. 创建TabHost实例:首先,在布局文件中定义一个TabHost,...

    Android程序研发源码Android TabHost内嵌ActivityGroup界面管理源码.rar

    在TabHost中,ActivityGroup常被用来作为每个Tab的内容容器,使得每个Tab可以独立地展示不同的Activity,从而实现类似浏览器标签页的效果。 在提供的源码中,我们可以看到以下几个关键文件: 1. **AndroidManifest...

    ActivityGroupTest ActivityGroup 实现Tab分页

    在Android开发中,`ActivityGroup`是早期API Level 13...总结来说,`ActivityGroup`是早期Android开发中实现Tab分页的一种方法,但随着`Fragment`的引入,现在推荐使用`Fragment`来构建更加灵活且易于维护的分页界面。

    基于GridView和ActivityGroup实现的TAB分页

    在Android应用开发中,"基于GridView和ActivityGroup实现的TAB分页"是一个常见的设计模式,用于构建具有多个页面(Tab)且每个页面展示不同数据集的应用界面。这种设计能够提高用户体验,让用户通过简单的点击切换就...

    Android Gallery+ActivityGroup实现滑动TAB独立Activity

    因此,如果你正在开发新项目,建议使用Fragment来实现Tab切换功能,而不是ActivityGroup。 在实际的项目开发中,可以考虑使用ViewPager结合FragmentTabHost或者PagerTitleStrip来创建滑动Tab。这种方式更加现代且...

    基于GridView和ActivityGroup实现的TAB分页(附源码)

    在Android开发中,创建带有分页功能的界面是常见的需求,而使用`GridView`和`ActivityGroup`实现分页是一种不常用但仍然有效的方法。在本文中,我们将深入探讨如何结合这两种组件来创建一个TAB分页的效果。 首先,`...

    ActivityGroup + GridView 实现Tab分页标签

    在Android开发中,实现Tab分页标签是一种常见的用户界面设计,可以为用户提供便捷的导航体验。本示例中,我们采用`ActivityGroup`和`GridView`来构建这种功能。`ActivityGroup`是早期Android SDK中的一个类,用于在...

    ActivityGroup+GridView实现Tab分页标签的滑动切换界面

    在实现Tab分页滑动切换界面的过程中,我们首先需要创建一个主`Activity`,这个`Activity`会包含`TabHost`。然后在`TabHost`中创建`TabSpec`,每个`TabSpec`对应一个`ActivityGroup`,这样每个Tab就可以加载不同的...

    高仿微信的界面 - ActivityGroup + GridView 实现Tab分页

    这个教程将带你了解如何使用`ActivityGroup`和`GridView`来实现Tab分页,从而达到高仿微信界面的效果。`ActivityGroup`是Android早期版本中用于在一个Activity内嵌套其他Activity的方式,而`GridView`则是一个可以...

    转载:ActivityGroup 实现TabHost

    虽然ActivityGroup在早期的Android开发中起到了一定作用,但随着Android版本的更新和最佳实践的改变,现在更推荐使用Fragment和FragmentTransaction来实现Tab导航。使用Fragment可以提高代码质量,减少内存泄漏,...

    tab切换之activitygroup模式

    在早期的Android版本中,`ActivityGroup`被广泛用于实现Tab切换的效果,尤其是在自定义TabHost或者TabWidget时。然而,随着Android SDK的发展,`ActivityGroup`已经逐渐被淘汰,现在更推荐使用`Fragment`和`...

    ActivityGroup + GridView + ViewFlipper 实现选项卡.zip

    首先,`ActivityGroup`是Android早期版本(API level 13之前)提供的一种特殊类型的`Activity`,它允许在一个`Activity`内嵌套其他`Activity`,从而实现类似Tab切换的效果。然而,由于`ActivityGroup`存在一些设计上...

    ActivityGroup和GridView实现标签分页

    6. **顶部Tab实现**: 压缩包中的"ActivityGroup和GridView实现标签分页(顶部Tab)"可能是指在顶部添加一个水平滚动的Tab条,通常使用HorizontalScrollView或ViewPager实现,这种方式可以提供更丰富的交互体验。...

Global site tag (gtag.js) - Google Analytics