• Android UI开发第十八篇——ActivityGroup实现tab功能


      2012CSDN年度博客之星评选期待您的参与

    http://vote.blog.csdn.net/item/blogstar/xyz_lmn

              

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

     

    /**
    * @author 张兴业
    * 邮箱:xy-zhang#163.com
    * android开发进阶群:278401545
    *
    */

          


     

  • 相关阅读:
    《一个程序员的奋斗史》猜“封面+页数”结果揭晓!!
    软中断小结
    【嵌入式Linux学习七步曲之第五篇 Linux内核及驱动编程】Linux内核抢占实现机制分析
    《一个程序员的奋斗史》猜“封面+页数”结果揭晓!!
    深入理解linux内核自旋锁
    Linux 2.6 内核定时器
    在用户空间发生中断时,上下文切换的过程
    Linux 中断总结
    Linux内核抢占实现机制分析
    寒假Day23:Git初步创建版本库
  • 原文地址:https://www.cnblogs.com/xyzlmn/p/3168160.html
Copyright © 2020-2023  润新知