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功能了。
ActivityGroup实现tab功能的更多相关文章
- 手动实现jQuery Tools里面tab功能
平时开发中用的Javascript类库都是jQuery,用到插件或者第三方类库能从jQuery Tools里面找到,基本不用其他的.当然有时同事喜欢使用jQuery UI里面的插件.并且jQuery ...
- jquery 回车切换 tab功能
挺有趣的,Jquery 回车切换tab功能的实现哦 <html> <head><!--jquery库.js--></head> <body> ...
- Android UI ActionBar功能-自定义Tab功能
还可以使用ActionBar实现Tab选项卡功能: 官方帮助文档:http://wear.techbrood.com/training/basics/actionbar/styling.html#Cu ...
- c# winfrom 页面的enter变为tab 功能使用 在特定的按钮里面如何继续当enter使用求大神帮忙解答一下 !!急
enter 当tab 键用 已经实现 :例如按回车的时候切换一直走 ,走到一个按钮如何让回车键在这个按钮的时候还是执行enter按钮的功能而不是tab 求大神解答一下, 目前页面tab功能改为 ...
- 实现Tab功能
网上实现Tab功能的方法有很多,这里我使用Fragment的方法,我觉着比较简单易懂 MainActivity private android.app.FragmentManager fragment ...
- 自己在项目中写的一个Jquery插件和Jquery tab 功能
后台查询结果 PDFSearchResult实体类: [DataContract(Name = "PDFSearchResult")] public class PDFSearch ...
- easyui实现树形菜单Tab功能、layout布局
一:常见三种前端ui框架 在初学者入门的状态下,我们常见的前端框架有三种且都有自己的官方网站: 1.easyui:官方网站(http://www.jeasyui.net/) 基于jquery的用户页面 ...
- 大熊君JavaScript插件化开发------(实战篇之DXJ UI ------ Tab功能扩展完结版)
一,开篇分析 Hi,大家好!大熊君又和大家见面了,还记得上一篇文章吗.主要讲述了一个“Tab”插件是如何组织代码以及实现的”,以及过程化设计与面向对象思想设计相结合的方式是 如何设计一个插件的,两种方 ...
- jQuery+css实现tab功能
点击我我会消失 Click me 点击按钮我会消失,再点击我会出现 演示tab tab1 tab2 tab3 [环球时报记者 郭芳] “中国秘密发射新快速响应火箭”,25日,在中国官方媒体报道我国“快 ...
随机推荐
- linux服务后台管理
把进程放到后台有两种方法 1.cmmand & 2.ctrl+z 暂停到后台 查看后台服务 jobs 把后台进程移到前台 fg %2 工作号 恢复到前台 后台服务继续执行 bg ...
- http-equiv制作跳转欢迎页面
做网站嘛,没有个欢迎页面肿么能忍? 要忽悠下浏览者的嘛. 然后此处省略一万字... 目的:不需要其他的脚本,直接在meta中控制时间,跳转页面 原理很简单: < meta http-equiv= ...
- uva1494 最小生成树--例题
这题说的是n个城市 建路 使他们联通然后 , 可以使用一条超级的路这条路不计入总长,此时路长度为B, 这条路链接的两个城市人口与和为A+B, 然后计算出最大的A/B 解题 先生成一颗最小生成树,然后 ...
- HTTP 协议入门
本文转载自:http://www.ruanyifeng.com/blog/2016/08/http.html HTTP 协议是互联网的基础协议,也是网页开发的必备知识,最新版本 HTTP/2 更是让它 ...
- centos7.3上安装oracle xe 11g
oracle -11g-xe是数据库是免费版本,支持标准版的大部分功能.oracle XE版本也称快捷版本.是个个人学习,熟悉oracle的简化版. oracle XE做为免费的Oracle数据库版本 ...
- 处理内容有&特殊字符thinkphp返回xml无法解析的问题<![CDATA[xxx]]>
处理内容有&特殊字符thinkphp返回xml无法解析的问题<![CDATA[xxx]]> // xml 转义特殊字符 如&'" <![CDATA[&quo ...
- 计算两个集合的差集——第六期 Power8 算法挑战赛
第六期Power8大赛 1.1 比赛题目 题目: 计算两个集合的差集: 详细说明: 分别有集合A和B两个大数集合,求解集合A与B的差集(A中有,但B中无的元素),并将结果保存在集合C中,要求集合C中的 ...
- python脚本监控获取当前Linux操作系统[内存]/[cpu]/[硬盘]/[登录用户]
此脚本应用在linux, 前提是需要有python和python的psutil模块 脚本 #!/usr/bin/env python # coding=utf-8 import sys import ...
- JAVA学习调查问卷——20145101
1.你对自己的未来有什么规划?做了哪些准备? 我希望在未来不管自己是否从事机要工作,都要做一个有能力,对社会能有所贡献的人.所以在现阶段我应该努力学习基础知识,夯实基本功,具备成为合格机要人的素质. ...
- 20145118 《Java程序设计》课程总结
20145118 <Java程序设计>课程总结 每周读书笔记连接汇总 假期笔记 http://www.cnblogs.com/cy1123/p/5224305.html 第一周读书笔记 h ...