一、TabHost是一个选项卡容器,通过标签页将多个Activity整合到一起。
TabHost的三要素为:TabWidget、FrameLayout、List<TabSpec>。
其主要的使用方式有两种: 1.继承TabActivity,结合对应的xml配置文件导入tab选项内容体
2.继承Activity,结合拥有TabHost标签的xml配置文件导入
第一种方式:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="fill_parent"android:layout_height="fill_parent"android:orientation="vertical" ><LinearLayoutandroid:id="@+id/tab1"android:layout_width="fill_parent"android:layout_height="fill_parent"android:orientation="vertical" ><TextViewandroid:id="@+id/view1"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="TabHost 1" /></LinearLayout><LinearLayoutandroid:id="@+id/tab2"android:layout_width="fill_parent"android:layout_height="fill_parent" ><TextViewandroid:id="@+id/view2"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="TabHost 2" /></LinearLayout><LinearLayoutandroid:id="@+id/tab3"android:layout_width="fill_parent"android:layout_height="fill_parent"android:orientation="vertical" ><TextViewandroid:id="@+id/view3"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="TabHost 3" /></LinearLayout><LinearLayoutandroid:id="@+id/tab4"android:layout_width="fill_parent"android:layout_height="fill_parent"android:orientation="vertical" ><TextViewandroid:id="@+id/view4"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="TabHost 4" /></LinearLayout></LinearLayout>
public class MainActivity extends TabActivity {@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);//获得TabHost对象TabHost tb=this.getTabHost();LayoutInflater.from(this).inflate(R.layout.activity_main, tb.getTabContentView(), true);//setIndicator方法设置选项卡的标题和对应图标 setContent设置对应的内容tb.addTab(tb.newTabSpec("spec1").setIndicator("选项卡1",getResources().getDrawable(R.drawable.audio)).setContent(R.id.tab1));tb.addTab(tb.newTabSpec("spec2").setIndicator("选项卡2",getResources().getDrawable(R.drawable.folder)).setContent(R.id.tab2));tb.addTab(tb.newTabSpec("spec3").setIndicator("选项卡3",getResources().getDrawable(R.drawable.image)).setContent(R.id.tab3));}
}
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="fill_parent"android:layout_height="fill_parent"android:orientation="vertical" ><TabHostandroid:id="@+id/tabhost"android:layout_width="match_parent"android:layout_height="match_parent" ><LinearLayoutandroid:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical" ><TabWidgetandroid:id="@android:id/tabs"android:layout_width="match_parent"android:layout_height="wrap_content"></TabWidget><FrameLayoutandroid:id="@android:id/tabcontent"android:layout_width="match_parent"android:layout_height="match_parent" ><LinearLayoutandroid:id="@+id/tab1"android:layout_width="match_parent"android:layout_height="match_parent" ></LinearLayout><LinearLayoutandroid:id="@+id/tab2"android:layout_width="match_parent"android:layout_height="match_parent" ></LinearLayout><LinearLayoutandroid:id="@+id/tab3"android:layout_width="match_parent"android:layout_height="match_parent" ></LinearLayout></FrameLayout></LinearLayout></TabHost></LinearLayout>
其中 TabWidget、FrameLayout的名字必须是固定的。
public class MainActivity extends Activity {@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);TabHost tb=(TabHost)findViewById(R.id.tabhost);tb.setup();TabHost.TabSpec spec1=tb.newTabSpec("tab1");spec1.setContent(R.id.tab1);spec1.setIndicator("选项卡一");tb.addTab(spec1);TabHost.TabSpec spec2=tb.newTabSpec("tab2");spec2.setContent(R.id.tab2);spec2.setIndicator("选项卡二");tb.addTab(spec2);TabHost.TabSpec spec3=tb.newTabSpec("tab3");spec3.setContent(R.id.tab3);spec3.setIndicator("选项卡三");tb.addTab(spec3);}
}

Tabhost中的常用方法:
getTag():获取标签字符串
getCurrentTab():获取当前选项卡ID
getTabWidget():根据系统规定的id:tabs来找到Tabwidget
setOnTabChangedListener():change事件