Android TabActivity使用方法

TabActivity

首先Android裡面有個名為TabActivity來給我們方便使用。其中有以下可以關註的函數:
public TabHost getTabHost () 獲得當前TabActivity的TabHost
public TabWidget getTabWidget () 獲得當前TabActivity 的TabWidget

public void setDefaultTab (String tag) 這兩個函數很易懂, 就是設置默認的Tab
public void setDefaultTab (int index) 通過tab名——tag或者index(從0開始)

protected void onRestoreInstanceState (Bundle state) 這 兩個函數的介紹可以
protected void onSaveInstanceState (Bundle outState) 參考 Activity的生命周期

TabHost

那麼我們要用到的Tab載體是TabHost,需要從TabActivity.getTabHost獲取。
現在看看TabHost類,它有3個內嵌類:1個類TabHost.TabSpec,2個接口 TabHost.TabContentFactory和TabHost.OnTabChangeListener。後面會介紹這些類和接口。

TabHost類的一些函數:
public void addTab (TabHost.TabSpec tabSpec) 添加 tab,參數TabHost.TabSpec通過下面的函數返回得到
public TabHost.TabSpec newTabSpec (String tag) 創 建TabHost.TabSpec

public void clearAllTabs () remove所有的Tabs
public int getCurrentTab ()
public String getCurrentTabTag ()
public View getCurrentTabView ()
public View getCurrentView ()
public FrameLayout getTabContentView () 返回Tab content的FrameLayout

public TabWidget getTabWidget ()
public void setCurrentTab (int index) 設置當前的Tab by index
public void setCurrentTabByTag (String tag) 設置當前的Tab by tag
public void setOnTabChangedListener (TabHost.OnTabChangeListener l) 設置TabChanged事件的響應處理
public void setup () 這個函數後面介紹

TabHost.TabSpec

從上面的函數可以知道如何添加tab瞭,要註意,這裡的Tag(標簽),不是Tab按鈕上的文字。
而要設置tab的label和content,需要設置TabHost.TabSpec類。 引用SDK裡面的話——“A tab has a tab indicator, content, and a tag that is used to keep track of it.”,TabHost.TabSpec就是管理這3個東西:
public String getTag ()
public TabHost.TabSpec setContent
public TabHost.TabSpec setIndicator

我理解這裡的Indicator 就是Tab上的label,它可以
設置labelsetIndicator (CharSequence label)
或者同時設置label和iconsetIndicator (CharSequence label, Drawable icon)
或者直接指定某個viewsetIndicator (View view)

對於Content ,就是Tab裡面的內容,可以
設置View的idsetContent(int viewId)
或者TabHost.TabContentFactory 的createTabContent(String tag)來處理:setContent(TabHost.TabContentFactory contentFactory)
或者用new Intent 來引入其他Activity的內容:setContent(Intent intent)

主程序代碼

Acitvit裡面的代碼代碼 收藏代碼

  1. package com.yang.tabletest;

  2. import android.app.TabActivity;

  3. import android.os.Bundle;

  4. import android.view.LayoutInflater;

  5. import android.widget.TabHost;

  6. public class TableTestAcitivity extends TabActivity{

  7. /** Called when the activity is first created. */

  8. @Override

  9. public void onCreate(Bundle savedInstanceState) {

  10. super.onCreate(savedInstanceState);

  11. //setContentView(R.layout.main);

  12. //獲得當前TabActivity的TabHost

  13. TabHost tabHost = getTabHost();

  14. LayoutInflater.from(this).inflate(R.layout.tabs1, tabHost.getTabContentView(), true);

  15. tabHost.addTab(tabHost.newTabSpec(“tab1”)

  16. .setIndicator(“主頁”)

  17. .setContent(R.id.view1));

  18. tabHost.addTab(tabHost.newTabSpec(“tab2”)

  19. .setIndicator(“標題”)

  20. .setContent(R.id.view2));

  21. tabHost.addTab(tabHost.newTabSpec(“tab3”)

  22. .setIndicator(“簡介”)

  23. .setContent(R.id.view3));

  24. tabHost.addTab(tabHost.newTabSpec(“tab4”)

  25. .setIndicator(“關於”)

  26. .setContent(R.id.view4));

  27. }

  28. }

    tabls.xml裡面的代碼

    Tabi.xml代碼 收藏代碼

    1. <frameLayout xmlns:android=”https://schemas.android.com/apk/res/android” <li>
      android:layout_width="fill_parent"

    2. android:layout_height=”fill_parent”>

    3. <TextView android:id="@+id/view1"

    4. android:background=”@drawable/blue”

    5. android:layout_width=”fill_parent”

    6. android:layout_height=”fill_parent”

    7. android:text=”@string/tabs_1_tab_1″/>

    8. <TextView android:id="@+id/view2"

    9. android:background=”@drawable/red”

    10. android:layout_width=”fill_parent”

    11. android:layout_height=”fill_parent”

    12. android:text=”@string/tabs_1_tab_2″/>

    13. <TextView android:id="@+id/view3"

    14. android:background=”@drawable/green”

    15. android:layout_width=”fill_parent”

    16. android:layout_height=”fill_parent”

    17. android:text=”@string/tabs_1_tab_3″/>

    18. <TextView android:id="@+id/view4"

    19. android:background=”@drawable/green”

    20. android:layout_width=”fill_parent”

    21. android:layout_height=”fill_parent”

    22. android:text=”@string/tabs_1_tab_4″/>

    23. </frameLayout>

      string.xml的代碼

      Java代碼 收藏代碼

      1. Hello World, TableTestAcitivity!

      2. 阿福學習

      3. 主頁

      4. 標題

      5. 關於

      6. 返回

      7. color.xml代碼

        Java代碼 收藏代碼

        1. #404040ff

        2. #ff00ff

        3. #0ff0ff

        4. #c0c0c0ff

        5. #ffFF33ff

        6. #00ffff

        7. #808080ff

        8. #ff6699ff

        9. #66ffffff

        10. #000000

        11. #FFFFFF

        12. 第二個例子的Activity代碼

          Java代碼 收藏代碼

          1. package com.yang.tabletest;

          2. import android.app.TabActivity;

          3. import android.os.Bundle;

          4. import android.view.View;

          5. import android.widget.TabHost;

          6. import android.widget.TextView;

          7. public class TableTestAcitivity extends TabActivity implements TabHost.TabContentFactory{

          8. /** Called when the activity is first created. */

          9. @Override

          10. public void onCreate(Bundle savedInstanceState) {

          11. super.onCreate(savedInstanceState);

          12. final TabHost tabHost = getTabHost();

          13. tabHost.addTab(tabHost.newTabSpec(“tab1”)

          14. .setIndicator(“主頁”, getResources().getDrawable(R.drawable.test))

          15. .setContent(this));

          16. tabHost.addTab(tabHost.newTabSpec(“tab2”)

          17. .setIndicator(“標題”,getResources().getDrawable(R.drawable.test))

          18. .setContent(this));

          19. tabHost.addTab(tabHost.newTabSpec(“tab3”)

          20. .setIndicator(“關於”,getResources().getDrawable(R.drawable.test))

          21. .setContent(this));

          22. }

          23. @Override

          24. public View createTabContent(String arg0) {

          25. final TextView tv = new TextView(this);

          26. tv.setText(“Content for tab with tag ” + arg0);

          27. return tv;

          28. }

          29. }

            • 大小: 14.3 KB
              • TableTest.zip (25.4 KB)
              • 下載次數: 563
                • 大小: 12.6 KB
                  • TableTest2.zip (29.8 KB)
                  • 下載次數: 487

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。