要使用TabHost,首先需要通過getTabHost方法來獲取TabHost的對象,然後通過addTab方法來向TabHost中添加 Tab。當然每個Tab在切換時都會產生一個事件,要捕捉這個事件需要設置TabActivity的事件監聽 setOnTabChangedListener。我們先來看看運行效果吧。
佈局文件
<?xml version="1.0" encoding="utf-8"?>
<TabHost xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@android:id/tabhost"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<LinearLayout
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<TabWidget
android:id="@android:id/tabs"
android:layout_width="fill_parent"
android:layout_height="wrap_content"/>
<FrameLayout
android:id="@android:id/tabcontent"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<TextView
android:id="@+id/textview1"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:text="Linux"
android:textColor="#FF0000"
/>
<TextView
android:id="@+id/textview2"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:textColor="#385E0F"
android:text="MAC"/>
<TextView
android:id="@+id/textview3"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:textColor="#1E90FF"
android:text="Window"/>
</FrameLayout>
</LinearLayout>
</TabHost>
這裏稍有不同,用的是 TabHost 然後 LinearLayout裏邊套了一個 FrameLayout
LinearLayout 就不說了 這裏說一下 FrameLayout 的特點 FrameLayout是最簡單的一個佈局對象。它被定製爲你屏幕上的一個空白備用區域,之後你可以在其中填充一個單一對象 — 比如,一張你要發佈的圖片。所有的子元素將會固定在屏幕的左上角;你不能爲FrameLayout中的一個子元素指定一個位置。後一個子元素將會直接在前一個子元素之上進行覆蓋填充,把它們部份或全部擋住(除非後一個子元素是透明的)。這裏最重要的特點就是 後一個子元素將會直接在前一個子元素之上進行覆蓋填充,把它們部分或全部擋住 我們也正是利用了它的這一特點。 大家看看運行效果就知道咋回事了。這裏有個關於佈局對象的簡單講解http://blog.csdn.net/Android_Tutor/archive/2009/11/06/4779097.aspx
下邊是 Activity 類
- package xiaohang.zhimeng;
- import android.app.AlertDialog;
- import android.app.Dialog;
- import android.app.TabActivity;
- import android.content.DialogInterface;
- import android.graphics.Color;
- import android.os.Bundle;
- import android.widget.TabHost;
- import android.widget.TabHost.OnTabChangeListener;
- //這裏注意一下,繼承的是TabActivity 不是Activity
- public class Activity01 extends TabActivity {
- // 聲明TabHost對象
- TabHost xh_TabHost;
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- // 取得TabHost對象
- xh_TabHost = getTabHost();
- /**
- * 爲TabHost添加標籤 新建一個newTabSped(newTabSpec) 設置其標籤和圖標(setIndicator)
- * 設置內容(setContent)
- */
- // TabSpec 是TabHost的內部類 TabHost對象的 newTabSpec()方法返回一個TabSpec對象 這個關係要搞清楚
- /*
- * 源碼裏邊是這麼寫的 public TabSpec newTabSpec(String tag) { return new
- * TabSpec(tag); }
- */
- xh_TabHost.addTab(xh_TabHost.newTabSpec("tab_test1")
- // setIndicator()此方法用來設置標籤和圖表
- .setIndicator("TAB 1",
- getResources().getDrawable(R.drawable.img1))
- // 指定內容爲一個TextView --->public TabHost.TabSpec setContent (int
- // viewId) 此方法需要一個 viewId 作爲參數
- .setContent(R.id.textview1));
- xh_TabHost.addTab(xh_TabHost.newTabSpec("tab_test2").setIndicator(
- "TAB 2", getResources().getDrawable(R.drawable.img2))
- .setContent(R.id.textview2));
- xh_TabHost.addTab(xh_TabHost.newTabSpec("tab_test3").setIndicator(
- "TAB 3", getResources().getDrawable(R.drawable.img3))
- .setContent(R.id.textview3));
- // 設置TabHost的背景顏色
- xh_TabHost.setBackgroundColor(Color.argb(150, 22, 70, 150));
- // 設置TabHost的背景圖片資源
- xh_TabHost.setBackgroundResource(R.drawable.bg2);
- // 設置當前顯示哪一個標籤 我的理解就是當你第一次啓動程序默認顯示那個標籤 這裏是指定的選項卡的ID從0開始
- xh_TabHost.setCurrentTab(0);
- // 標籤切換事件處理,setOnTabChangedListener 注意是標籤切換事件不是點擊事件
- // 就是從一個標籤切換到另外一個標籤會觸發的事件
- xh_TabHost.setOnTabChangedListener(new OnTabChangeListener() {
- @Override
- public void onTabChanged(String tabId) {
- // 定義一個彈出式的對話框
- Dialog dialog = new AlertDialog.Builder(Activity01.this)
- .setTitle("提示").setMessage("當前選中了:" + tabId + "標籤")
- .setPositiveButton("確定",
- new DialogInterface.OnClickListener() {
- @Override
- public void onClick(DialogInterface dialog,
- int which) {
- // 取消對話框
- dialog.cancel();
- }
- }).create();// 創建出一個“確定”按鈕
- // 啓動此對話框並且顯示在屏幕上
- dialog.show();
- }
- });
- }
- }
-
- 測試代碼:點擊打開鏈接