Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發實例 >> android 2.3 r1 中文 api (58) —— TabHost

android 2.3 r1 中文 api (58) —— TabHost

編輯:Android開發實例

正文

  一、結構

public class TabHost extends FrameLayout implements ViewTreeObserver.OnTouchModeChangeListener

        

java.lang.Object

android.view.View

        android.view.ViewGroup

                android.widget.FrameLayout

                        android.widget.TabHost

 

  二、概述

    
 

提供選項卡(Tab頁)的窗口視圖容器。此對象包含兩個子對象:一組是用戶可以選擇指定Tab頁的標簽;另一組是FrameLayout用來顯示該Tab頁的內容。個別元素通常控制使用這個容器對象,而不是設置在子元素本身的值。

(譯者注:即使使用的是單個元素,也最好把它放到容器對象ViewGroup裡)

 

  三、內部類

interface TabHost.OnTabChangeListener    

接口定義了當選項卡更改時被調用的回調函數

 

interface TabHost.TabContentFactory  

當某一選項卡被選中時生成選項卡的內容

 

class TabHost.TabSpec     

單獨的選項卡,每個選項卡都有一個選項卡指示符,內容和tag標簽,以便於記錄.

 

  四、公共方法

public void addTab (TabHost.TabSpec tabSpec)

新增一個選項卡

參數

tabSpec    指定怎樣創建指示符和內容.

 

public void clearAllTabs ()

從tab widget中移除所有關聯到當前tab host的選項卡

 

public boolean dispatchKeyEvent (KeyEvent event)

分發按鍵事件到焦點傳遞路線上的下一視圖。焦點傳遞路線從視圖樹的頂層開始一直到當前獲取焦點的視圖停止。如果此視圖已經獲取焦點,將分發給它自身。否則,將分發到焦點傳遞路線的下一節點。此方法會觸發任何一個按鍵監聽器.

(譯者注:關於focus path,可以參考以下地址:

http://www.fengfly.com/plus/view-192691-1.html)

參數

event        分發的按鍵事件

返回值

如果事件已經處理則返回true,否則返回false.

 

public void dispatchWindowFocusChanged (boolean hasFocus)

當窗口包含的此視圖獲取或丟失焦點時觸發此方法.ViewGroups應該重寫以路由到他的子元素

參數

hasFocus 如果窗口包含的此view依獲取焦點,返回true,否則返回false.

 

public int getCurrentTab ()

(譯者注:獲取當前選項卡的id)

 

public String getCurrentTabTag ()

(譯者注:當前選項卡的Tag標簽內容)

 

public View getCurrentTabView ()

(譯者注:獲取當前選項卡的視圖view)

 

public View getCurrentView ()

(譯者注:獲取當前的視圖view)

 

public FrameLayout getTabContentView ()

獲取保存tab內容的FrameLayout

 

public TabWidget getTabWidget ()

(譯者注:根據系統規定的id:tabs來找到TabWidget,並返回,注意,這裡的ID必須是tabs。源代碼中表示如下:

private TabWidget mTabWidget;

mTabWidget=(TabWidget)findViewById(com.android.internal.R.id.tabs);

 

public TabHost.TabSpec newTabSpec (String tag)

獲取一個新的TabHost.TabSpec,並關聯到當前tab host

參數

tag   所需的選項卡標簽(tag)

 

public void onTouchModeChanged (boolean isInTouchMode)

當觸摸模式發生改變時調用的回調函數.

參數

isInTouchMode         如果視圖結構當前處於觸摸模式,返回true,否則返回false.

 

public void setCurrentTab (int index)

(譯者注:設置當前的選項卡

參數

Index        為當前選項卡的索引。)

 

public void setCurrentTabByTag (String tag)

(譯者注:根據選項卡的Tab標簽來設置當前的選項卡

                            參數

tag 想要被設置為當前選項卡的tag標簽值。)

 

public void setOnTabChangedListener (TabHost.OnTabChangeListener l)

注冊一個回調函數,當選項卡中的任何一個tab的選中狀態發生改變時調用。

(譯者注:setCurrentTab(index)時會觸發調用)

參數

l        將運行的回調函數

        

public void setup ()

如果使用findViewById()加載TabHost,那麼在新增一個選項卡tab之前,需要調用setup()。然而,當你在一個TabActivity裡使用getTabHost()獲取TabHost,你就不再需要調用setup()了。(譯者注:實現tab窗口的兩種方法:繼承activity時,使用findViewById()查找TabHost,然後調用setup();繼承TabActivity,通過getTabHost()查找,此時不用調用setup())例子:

    

 

 

public void setup (LocalActivityManager activityGroup)

如果你使用setContent(android.content.Intent),那麼當activityGroup用於加載本地activity之時,必須調用此方法。如果你拓展(繼承)TabActivity將自動調用setup()方法。

參數

activityGroup   用來為選項卡內容加載activities的ativityGroup

 

  五、受保護方法

protected void onAttachedToWindow ()

當視圖附加到窗口上時被調用。在這個點的表面進行繪制。注意此函數確保在onDraw(Cancas)之前調用,然而它可能在第一次執行onDraw之前的任何時間被調用——包括的onMeasure(int,int)的之前或之後。

 

protected void onDetachedFromWindow ()

當視圖從窗口分離時被調用。在這個點的表面不再有畫面繪制。

 

    示例代碼

      截圖:

        

      JAVA文件:

public class Tabs1 extends TabActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        TabHost tabHost = getTabHost();
        
        LayoutInflater.from(this).inflate(R.layout.tabs1, tabHost.getTabContentView(), true);

        tabHost.addTab(tabHost.newTabSpec("tab1")
                .setIndicator("tab1")
                .setContent(R.id.view1));
        tabHost.addTab(tabHost.newTabSpec("tab3")
                .setIndicator("tab2")
                .setContent(R.id.view2));
        tabHost.addTab(tabHost.newTabSpec("tab3")
                .setIndicator("tab3")
                .setContent(R.id.view3));
    }
}

 

      XML文件:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TextView android:id="@+id/view1"
        android:background="@drawable/blue"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:text="@string/tabs_1_tab_1"/>

    <TextView android:id="@+id/view2"
        android:background="@drawable/red"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:text="@string/tabs_1_tab_2"/>

    <TextView android:id="@+id/view3"
        android:background="@drawable/green"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:text="@string/tabs_1_tab_3"/>

</FrameLayout>

        詳細參見apidemo/view/tabs1

 

結束

  翻譯組人數剛剛突破100人,人員組織也剛剛調整完,下一步再確定審核員已經翻譯手冊的修改,完善整個組織結構和流程規則,希望翻譯組能健健康康的持續下去,感謝大家熱心參與,再次感謝"madgoat"為大家帶來優秀的翻譯稿。

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved