`
1320438999
  • 浏览: 130024 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

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功能的效果图如下。

先看一下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() {					
			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功能了。

分享到:
评论

相关推荐

    Android之ActivityGroup实现Tab分页标签

    ActivityGroup是Android早期版本(Android 2.x)中提供的一种特殊类型的Activity,它允许开发者在一个单独的Task中管理多个子Activity,从而实现类似Tab切换的效果。不过,随着Android版本的更新,ActivityGroup逐渐...

    ActivityGroup实现tab功能

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

    gridview+activityGroup实现tab分页

    在Android开发中,创建一个具有分页功能的Tab布局是常见的需求,这通常涉及到GridView和ActivityGroup的结合使用。下面将详细解释这两个组件以及如何利用它们实现Tab分页。 首先,`GridView`是Android的一种视图...

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

    "Android Gallery+ActivityGroup实现滑动TAB独立Activity"是一个设计模式,它利用Android的Gallery组件和ActivityGroup来达到这一目的。在这个模式中,每个Tab都对应一个独立的Activity,从而提供更灵活和丰富的用户...

    ActivityGroupTest ActivityGroup 实现Tab分页

    在Android开发中,`ActivityGroup`是早期API Level 13之前用来实现多级Tab页面的一种方式。在本文中,我们将深入探讨`ActivityGroup`如何帮助开发者构建具有分页功能的用户界面,以及如何在实际项目中应用它。 首先...

    Android之ActivityGroup + GridView 实现Tab分页标签

    很多客户端软件和浏览器软件都喜欢用Tab分页标签来搭建界面框架。读者也许会马上想到使用TabHost 与 TabActivity的组合,其实最常用的不是它们,而是由GridView与ActivityGroup的组合。每当用户在GridView选中一项,...

    基于GridView和ActivityGroup实现的TAB分页

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

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

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

    android ActivityGroup的demo

    7. **Fragment替代方案**:随着Android版本的更新,Fragment已经成为实现类似ActivityGroup功能的首选。Fragment可以在同一个Activity中进行添加、移除和替换,同时提供了更好的生命周期管理,包括与Activity的协调...

    tab切换之activitygroup模式

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

    ActivityGroup + GridView 实现Tab分页标签

    综上所述,`ActivityGroup + GridView`实现的Tab分页标签方案虽然在早期Android开发中常见,但随着Android系统的不断升级,现在更推荐使用`Fragment`和`ViewPager`等更现代的组件。然而,理解这些旧技术仍然有助于...

    Android入门之ActivityGroup+GridView实现Tab分页标签的方法

    在Android程序中很多客户端软件和浏览器软件都喜欢用Tab分页标签来搭建界面框架。读者也许会马上想到使用TabHost 与 TabActivity的组合,其实最常用的不是它们,而是由GridView与ActivityGroup的组合。每当用户在...

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

    然而,由于`ActivityGroup`在新的Android版本中已被弃用,现在推荐使用`Fragment`和`ViewPager`来实现类似的功能,它们提供了更好的性能和兼容性。但了解这种旧的实现方式有助于理解Android历史上的设计决策,并且...

    android activitygroup底部菜单

    在Android应用开发中,ActivityGroup是一种特殊的容器,它允许在一个栈结构中管理多个子Activity,常见于早期Android版本(低于Android 3.0)的Tab布局或者自定义导航栏设计中。ActivityGroup的主要目的是实现类似...

    转载:ActivityGroup 实现TabHost

    这篇博文可能探讨了如何利用ActivityGroup来构建类似TabHost的功能,因为TabHost是Android SDK提供的一种用于在多个视图之间切换的布局管理器,通常与TabWidget结合使用,以实现具有标签页的用户界面。 ...

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

    总的来说,这个示例展示了如何在旧版Android中使用`ActivityGroup`和`GridView`来创建一个具有Tab分页功能的界面,尽管这种方法现在已经被更优的解决方案所取代。在实际开发中,应考虑使用`Fragment`和`ViewPager`等...

    ActivityGroup|顶部底部均有Tab标签之二

    在"ActivityGroup|顶部底部均有Tab标签之二"这个主题中,我们讨论的是如何在应用的顶部和底部同时设置Tab标签,以提供更丰富的用户体验。通常,顶部的Tab常用于主要功能的切换,而底部的Tab则用于应用程序的全局导航...

    Fragment + ViewPager 和 ActivityGroup tab横向滑动实现对比

    下面我们将详细探讨`Fragment + ViewPager`与`ViewPager + ActivityGroup`在实现tab横向滑动时的区别和知识点。 **Fragment + ViewPager** 1. **Fragment的引入**:Fragment是Android 3.0版本引入的概念,它是一个...

    高仿新浪微博tab

    在Android中实现Tab功能,可以使用多种方式,而"使用ActivityGroup实现"是一种较老的策略。ActivityGroup是Android早期API中的一个类,它允许在一个Activity内部管理多个子Activity,从而实现类似Tab的效果。然而,...

Global site tag (gtag.js) - Google Analytics