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代码:

  1. public class MainView extends ActivityGroup {
  2. @SuppressWarnings("unused")
  3. private LinearLayout bodyView,headview;
  4. private LinearLayout one, two, three, four;
  5. private int flag = 0; // 通过标记跳转不同的页面,显示不同的菜单项
  6. /** Called when the activity is first created. */
  7. @Override
  8. public void onCreate(Bundle savedInstanceState) {
  9. super.onCreate(savedInstanceState);
  10. setContentView(R.layout.view_main);
  11. initMainView();
  12. // 显示标记页面
  13. showView(flag);
  14. one.setOnClickListener(new OnClickListener() {
  15. public void onClick(View v) {
  16. // TODO Auto-generated method stub
  17. flag = 0;
  18. showView(flag);
  19. }
  20. });
  21. two.setOnClickListener(new OnClickListener() {
  22. public void onClick(View v) {
  23. // TODO Auto-generated method stub
  24. flag = 1;
  25. showView(flag);
  26. }
  27. });
  28. three.setOnClickListener(new OnClickListener() {
  29. public void onClick(View v) {
  30. // TODO Auto-generated method stub
  31. flag = 2;
  32. showView(flag);
  33. }
  34. });
  35. four.setOnClickListener(new OnClickListener() {
  36. public void onClick(View v) {
  37. // TODO Auto-generated method stub
  38. flag = 3;
  39. showView(flag);
  40. }
  41. });
  42. }
  43. /*
  44. * 初始化主界面
  45. */
  46. public void initMainView() {
  47. headview=(LinearLayout) findViewById(R.id.head);
  48. bodyView=(LinearLayout) findViewById(R.id.body);
  49. one=(LinearLayout) findViewById(R.id.one);
  50. two=(LinearLayout) findViewById(R.id.two);
  51. three=(LinearLayout) findViewById(R.id.three);
  52. four=(LinearLayout) findViewById(R.id.four);
  53. }
  54. // 在主界面中显示其他界面
  55. public void showView(int flag) {
  56. switch (flag) {
  57. case 0:
  58. bodyView.removeAllViews();
  59. View v = getLocalActivityManager().startActivity("one",
  60. new Intent(MainView.this, OneView.class)).getDecorView();
  61. one.setBackgroundResource(R.drawable.frame_button_background);
  62. two.setBackgroundResource(R.drawable.frame_button_nopressbg);
  63. three.setBackgroundResource(R.drawable.frame_button_nopressbg);
  64. four.setBackgroundResource(R.drawable.frame_button_nopressbg);
  65. bodyView.addView(v);
  66. break;
  67. case 1:
  68. bodyView.removeAllViews();
  69. bodyView.addView(getLocalActivityManager().startActivity("two",
  70. new Intent(MainView.this, TwoView.class))
  71. .getDecorView());
  72. one.setBackgroundResource(R.drawable.frame_button_nopressbg);
  73. two.setBackgroundResource(R.drawable.frame_button_background);
  74. three.setBackgroundResource(R.drawable.frame_button_nopressbg);
  75. four.setBackgroundResource(R.drawable.frame_button_nopressbg);
  76. break;
  77. case 2:
  78. bodyView.removeAllViews();
  79. bodyView.addView(getLocalActivityManager().startActivity(
  80. "three", new Intent(MainView.this, ThreeView.class))
  81. .getDecorView());
  82. one.setBackgroundResource(R.drawable.frame_button_nopressbg);
  83. two.setBackgroundResource(R.drawable.frame_button_nopressbg);
  84. three.setBackgroundResource(R.drawable.frame_button_background);
  85. four.setBackgroundResource(R.drawable.frame_button_nopressbg);
  86. break;
  87. case 3:
  88. bodyView.removeAllViews();
  89. bodyView.addView(getLocalActivityManager().startActivity(
  90. "four", new Intent(MainView.this, FourView.class))
  91. .getDecorView());
  92. one.setBackgroundResource(R.drawable.frame_button_nopressbg);
  93. two.setBackgroundResource(R.drawable.frame_button_nopressbg);
  94. three.setBackgroundResource(R.drawable.frame_button_nopressbg);
  95. four.setBackgroundResource(R.drawable.frame_button_background);
  96. break;
  97. default:
  98. break;
  99. }
  100. }
  101. }

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

  1. bodyView.removeAllViews();
  2. bodyView.addView(getLocalActivityManager().startActivity("two",
  3. new Intent(MainView.this, TwoView.class))
  4. .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功能了。

ActivityGroup实现tab功能的更多相关文章

  1. 手动实现jQuery Tools里面tab功能

    平时开发中用的Javascript类库都是jQuery,用到插件或者第三方类库能从jQuery Tools里面找到,基本不用其他的.当然有时同事喜欢使用jQuery UI里面的插件.并且jQuery ...

  2. jquery 回车切换 tab功能

    挺有趣的,Jquery 回车切换tab功能的实现哦 <html> <head><!--jquery库.js--></head> <body> ...

  3. Android UI ActionBar功能-自定义Tab功能

    还可以使用ActionBar实现Tab选项卡功能: 官方帮助文档:http://wear.techbrood.com/training/basics/actionbar/styling.html#Cu ...

  4. c# winfrom 页面的enter变为tab 功能使用 在特定的按钮里面如何继续当enter使用求大神帮忙解答一下 !!急

    enter 当tab  键用 已经实现  :例如按回车的时候切换一直走 ,走到一个按钮如何让回车键在这个按钮的时候还是执行enter按钮的功能而不是tab   求大神解答一下, 目前页面tab功能改为 ...

  5. 实现Tab功能

    网上实现Tab功能的方法有很多,这里我使用Fragment的方法,我觉着比较简单易懂 MainActivity private android.app.FragmentManager fragment ...

  6. 自己在项目中写的一个Jquery插件和Jquery tab 功能

    后台查询结果 PDFSearchResult实体类: [DataContract(Name = "PDFSearchResult")] public class PDFSearch ...

  7. easyui实现树形菜单Tab功能、layout布局

    一:常见三种前端ui框架 在初学者入门的状态下,我们常见的前端框架有三种且都有自己的官方网站: 1.easyui:官方网站(http://www.jeasyui.net/) 基于jquery的用户页面 ...

  8. 大熊君JavaScript插件化开发------(实战篇之DXJ UI ------ Tab功能扩展完结版)

    一,开篇分析 Hi,大家好!大熊君又和大家见面了,还记得上一篇文章吗.主要讲述了一个“Tab”插件是如何组织代码以及实现的”,以及过程化设计与面向对象思想设计相结合的方式是 如何设计一个插件的,两种方 ...

  9. jQuery+css实现tab功能

    点击我我会消失 Click me 点击按钮我会消失,再点击我会出现 演示tab tab1 tab2 tab3 [环球时报记者 郭芳] “中国秘密发射新快速响应火箭”,25日,在中国官方媒体报道我国“快 ...

随机推荐

  1. win10下的iis的配置(服务于asp.net)

    win10下的iis的配置和win7下的是类似的. 1.右键开始,打开控制面板,进入卸载程序中,勾上如下图所示的项目,即可装上iis. 这里写图片描述 2.重启后搜索iis,进入iis配置中.点击网站 ...

  2. 80. Remove Duplicates from Sorted Array II(双指针)

    Given a sorted array nums, remove the duplicates in-place such that duplicates appeared at most twic ...

  3. mysql B+Tree索引

    原文地址:http://blog.codinglabs.org/articles/theory-of-mysql-index.html 数据结构及算法基础 索引的本质 MySQL官方对索引的定义为:索 ...

  4. mysql设置环境变量

    临时修改环境变量 我们可以使用set语法在运行时修改环境变量,修改global变量后,对修改之前的session没有影响,对修修改之后的session生效:修改session变量后,修改后,对于该se ...

  5. maven intall在target文件夹中自动生成的war包部署服务器时缺斤少两

    1.问题描述,本地改动特别大或者升级系统操作,打war包部署服务器上程序时候,页面或者后台总是报错,原因就是比本地少东西. 2.问题排查解决:maven clean然后maven intall在tar ...

  6. Linux基础命令---dumpe2fs

    dumpe2fs 显示ext2.ext3.ext4文件系统的超级快和块组信息.此命令的适用范围:RedHat.RHEL.Ubuntu.CentOS.SUSE.openSUSE.Fedora. 1.语法 ...

  7. Linux用root强制踢掉已登录用户

    首先使用w命令查看所有在线用户: [root@VM_152_184_centos /]# w 20:50:14 up 9 days, 5:58, 3 users, load average: 0.21 ...

  8. 关于windows下c++生成的exe发布时的依赖dll问题

    如同linux下通常要求安装特定版本的libstdc++一样,windows下vc++生成的exe发布时的依赖dll问题,可以参见帖子,http://bbs.csdn.net/topics/39105 ...

  9. 嵌入式C语言--面试题

    C语言测试是招聘嵌入式系统程序员过程中必须而且有效的方法.这些年,我既参加也组织了许多这种测试,在这过程中我意识到这些测试能为带面试者和被面试者提供许多有用信息,此外,撇开面试的压力不谈,这种测试也是 ...

  10. jQuery:ajax处理html页面

    源码: $.ajax({ url: url, success: function (data) { var reg = /<body>[\s\S]*<\/body>/g; ]; ...