閱讀218 返回首頁    go 阿裏雲 go 技術社區[雲棲]


Android 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();  
  1.     bodyView.addView(getLocalActivityManager().startActivity("two",  
  2. new Intent(MainView.this, TwoView.class))  
  3. .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功能了。

 

最後更新:2017-04-02 16:47:42

  上一篇:go oracle和sql server取第一條記錄的區別以及rownum詳解
  下一篇:go oracle和sql server取第一條記錄的區別以及rownum詳解