標籤頁(TabHost+TabWidget)的使用


標籤頁在顯示上是相當方便且用途廣泛的元件,在電話簿,訊息中常常可見,簡單的範例如下圖


















首先是 TabHost 和 TabWidget 的關係, TabHost 包含著 TabWidget , 可以有多個 TabWidget 的存在,如上圖就包含 4 個 TabWidget (消費清單,本日消費,本周消費,本月消費),每個 TabWidget 可以視為不同的 Activity ,當手指觸碰到不同的 TabWidget ,就會執行不同的 TabWidget, TabHost 的 xml 結構如下

   1:  <?xml version="1.0" encoding="utf-8"?>
   2:  <TabHost xmlns:android="http://schemas.android.com/apk/res/android"
   3:      android:id="@android:id/tabhost"
   4:      android:layout_width="fill_parent"
   5:      android:layout_height="fill_parent" >
   6:   
   7:      <LinearLayout
   8:          android:id="@+id/LinearLayout01"
   9:          android:layout_width="fill_parent"
  10:          android:layout_height="fill_parent"
  11:          android:orientation="vertical" >
  12:   
  13:          <TabWidget
  14:              android:id="@android:id/tabs"
  15:              android:layout_width="match_parent"
  16:              android:layout_height="wrap_content" />
  17:   
  18:          <FrameLayout
  19:              android:id="@android:id/tabcontent"
  20:              android:layout_width="fill_parent"
  21:              android:layout_height="fill_parent" />
  22:      </LinearLayout>
  23:   
  24:  </TabHost>


這是標準的 TabHost 的 xml 格式,第 7 行指出是個線性垂直的佈局,且依序為 TabWidget(標籤頁),以及其內容(FrameLayout),接著來看 TabHost的程式碼,如下

   1:  package com.example.helloworld;
   2:   
   3:  import android.app.TabActivity;
   4:  import android.content.Intent;
   5:  import android.os.Bundle;
   6:  import android.widget.TabHost;
   7:  import android.widget.TabHost.TabSpec;
   8:   
   9:  @SuppressWarnings("deprecation")
  10:  public class Table_Flow extends TabActivity{
  11:   
  12:      public void onCreate(Bundle savedInstanceState){
  13:          super.onCreate(savedInstanceState);
  14:          
  15:          setContentView(R.layout.table_host);
  16:          
  17:          initView();
  18:      }
  19:      
  20:      
  21:      void initView(){
  22:          
  23:          TabHost thost = getTabHost();// build tabhost
  24:          
  25:          Intent inte = new Intent();
  26:          inte.setClass(Table_Flow.this, Table_widget4.class);
  27:          TabSpec ts = thost.newTabSpec("tab4");
  28:          ts.setContent(inte);
  29:          ts.setIndicator("消費清單");
  30:          thost.addTab(ts);
  31:          
  32:          inte = new Intent();
  33:          inte.setClass(Table_Flow.this, Table_widget1.class);
  34:          TabSpec ts1 = thost.newTabSpec("tab1");
  35:          ts1.setContent(inte);
  36:          ts1.setIndicator("本日消費");        
  37:          thost.addTab(ts1);
  38:          
  39:          inte = new Intent();
  40:          inte.setClass(Table_Flow.this, Table_widget2.class);
  41:          TabSpec ts2 = thost.newTabSpec("tab2");
  42:          ts2.setContent(inte);
  43:          ts2.setIndicator("本周消費");
  44:          thost.addTab(ts2);
  45:          
  46:          inte = new Intent();
  47:          inte.setClass(Table_Flow.this, Table_widget2.class);
  48:          TabSpec ts3 = thost.newTabSpec("tab3");
  49:          ts3.setContent(inte);
  50:          ts3.setIndicator("本月消費");
  51:          thost.addTab(ts3);
  52:          
  53:          thost.setCurrentTab(0);
  54:      }
  55:  }
  56:   
  57:   
  58:   

注意第 10 行繼承 TabActivity , 第 15 行套用上述的 xml 佈局 ,接著就是對各個 TabWidget 的初始化(initView)
第 23 行取得 TabHost 物件 thost
第 25 ~ 30 行為建立第 1 個 TabWidget 的內容
第 26 行注意 Table_widget4.class 必須先建立好,這代表當點選該標籤頁就會執行的類別
第 27 行建立 TabSpec 物件, tab4 代表該標籤頁的 Tag,之後若有需要可取得 Tag 即可
第 28 行設定 Content 內容,其對應的類別為 Table_widget4.class
第 29 行顯示的內容
第 30 行加入TabSpec

接著選擇其中 1 個最簡單的 TabWidget 來看(Table_widget2.class),其內容為

   1:  package com.example.helloworld;
   2:   
   3:  import android.app.Activity;
   4:  import android.os.Bundle;
   5:   
   6:  public class Table_widget2 extends Activity{
   7:   
   8:      public void onCreate(Bundle savedInstanceState){
   9:          super.onCreate(savedInstanceState);
  10:          
  11:          
  12:      }
  13:  }


是的~ 這個就是最簡單的 TabWidget ,當然你可以任意改寫其內容來達到需求

0 意見:

張貼留言

Twitter Delicious Facebook Digg Stumbleupon Favorites More

 
Design by Free WordPress Themes | Bloggerized by Lasantha - Premium Blogger Themes | Affiliate Network Reviews