Android利用ActivityGroup實現Tab功能

jopen 10年前發布 | 38K 次閱讀 Android開發 移動開發 ActivityGroup

android.app包中含有一個ActivityGroup類,該類是Activity 的容器,可以包含多個嵌套進來的Activitys,這篇文章就是借助ActivityGroup可以嵌套Activity的功能來實現Tab功能。 tab這種UI在很多的移動應用中可以看到,包括android、iphone、window phone7等移動終端上都有這樣的應用,Tab這種UI方式具有小視圖大容量的特點。

首先,從SDK中doc文檔中都可以獲知,ActivityGroup類的父類是Activity(見下圖),也就是說二者具有相同的接口和生命周期,同Activity一樣,也有onCreate()、onPause()等函數可供我們重載。

Android利用ActivityGroup實現Tab功能

ActivityGroup中有兩個public方法(下圖):ActivityGroup中可以調用getLocalActivityManage()方法獲取LocalActityManage來管理Activity。

Android利用ActivityGroup實現Tab功能

ActivityGroup實現的tab功能的效果圖如下。

Android利用ActivityGroup實現Tab功能           Android利用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;  
    }  
}  

}</pre></div>


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

</div>

bodyView.removeAllViews();  
         bodyView.addView(getLocalActivityManager().startActivity("two",  
                    new Intent(MainView.this, TwoView.class))  
                    .getDecorView());
</div> 使用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功能了。

來自:http://blog.csdn.net/way_ping_li/article/details/7989600

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!