天天看點

Android UI開發第十八篇——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功能的效果圖如下。

<a href="http://blog.51cto.com/attachment/201203/122903836.gif" target="_blank"></a>

先看一下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() {                    

                flag = 1;  

            }  

        three.setOnClickListener(new OnClickListener() {                  

                flag = 2;  

        four.setOnClickListener(new OnClickListener() {           

                public void onClick(View v) {  

                    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.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);  

        case 2:           

            bodyView.addView(getLocalActivityManager().startActivity(  

                    "three", new Intent(MainView.this, ThreeView.class))  

            three.setBackgroundResource(R.drawable.frame_button_background);  

        case 3:           

                    "four", new Intent(MainView.this, FourView.class))  

            four.setBackgroundResource(R.drawable.frame_button_background);  

        default:  

        }  

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

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

     本文轉自xyz_lmn51CTO部落格,原文連結:http://blog.51cto.com/xyzlmn/817245,如需轉載請自行聯系原作者

繼續閱讀