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 stubflag = 0;showView(flag);}});two.setOnClickListener(new OnClickListener() {public void onClick(View v) {// TODO Auto-generated method stubflag = 1;showView(flag);}});three.setOnClickListener(new OnClickListener() {public void onClick(View v) {// TODO Auto-generated method stubflag = 2;showView(flag);}});four.setOnClickListener(new OnClickListener() {public void onClick(View v) {// TODO Auto-generated method stubflag = 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功能了。

/** * @author 张兴业 * http://blog.csdn.net/xyz_lmn * iOS入门群:83702688
* android开发进阶群:241395671 * 我的新浪微博:@张兴业TBOW */

代码下载

http://download.csdn.net/detail/xyz_lmn/6308895


更多相关文章

  1. Android入门进阶教程(15)-进程创建zygote 详解
  2. Android圆形进度条控件-CircleSeekBar
  3. android ndk 开发之 在 框架层使用 jni
  4. Android中各种Adapter的使用方法
  5. Android系列之GreenDao数据升级和加密(三)
  6. 安卓NDK——原生开发工具包
  7. Android(安卓)ListView使用BaseAdapter与ListView的优化
  8. Android开发系列之调用WebService
  9. Android:快速修改ramdisk.img脚本

随机推荐

  1. 如何恢复数据库的账号 登录名/用户名等
  2. 完美解决SQL server2005中插入汉字变成问
  3. SQL Server常用存储过程及示例
  4. 浅析SQL存储过程和事务处理
  5. 浅析Sql server锁,独占锁,共享锁,更新锁,
  6. 深入解析MS-SQL锁机制
  7. Replace关键字的妙用查询是否包含某个特
  8. SQL Server优化50法汇总
  9. 执行一条sql语句update多条记录实现思路
  10. DDL、DML和DCL的区别与理解