西木 2012-12-13
使用TabHost 可以在一个屏幕间进行不同版面的切换,例如android自带的拨号应用。
完成一个TabHost的步骤:
一、设计布局文件,Tabhost布局文件一般使用FrameLayout,在FrameLayout中添加每个Tab页面的视图,但必须要有id,例如:
<?xmlversion="1.0"encoding="utf-8"?>
<FrameLayoutxmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"android:layout_height="fill_parent">
<!--第一个Tab对应的布局-->
<!--Tab内容必须用Layout布局将view包含,否则在程序中找不到View-->
<LinearLayoutandroid:id="@+id/tab01"
android:layout_width="fill_parent"android:layout_height="fill_parent"
android:orientation="vertical">
<ListViewandroid:id="@+id/weather"android:layout_width="fill_parent"
android:layout_height="fill_parent">
</ListView>
</LinearLayout>
<!--第二个Tab对应的布局-->
<LinearLayoutandroid:id="@+id/tab02"
android:layout_width="fill_parent"android:layout_height="fill_parent"
android:orientation="vertical">
<TextViewandroid:id="@+id/weath_detail"
android:layout_width="fill_parent"android:layout_height="fill_parent"
android:text="tab">
</TextView>
</LinearLayout>
<!--第三个Tab对应的布局-->
<LinearLayoutandroid:id="@+id/tab03"
android:layout_width="fill_parent"android:layout_height="fill_parent"
android:orientation="vertical">
<TextViewandroid:id="@+id/city_detail"android:layout_width="fill_parent"
android:layout_height="fill_parent"android:text="tab">
</TextView>
</LinearLayout>
</FrameLayout>
注意:每个Tab页面都要有自己的layout,负责在代码中通过Id无法找到相对应的视图
二、创建展示TabHost的Activity。
1、我们可以直接继承TabActivity,再通过getTabHost()方法得到TabHost对象。例如:
protectedvoidonCreate(BundlesavedInstanceState)
{
super.onCreate(savedInstanceState);
myTabHost=this.getTabHost();
//绑定布局文件
LayoutInflater.from(this).inflate(R.layout.tab_host,
myTabHost.getTabContentView(),
true);
initTabHost();
setTitle(weather.getCityName());
//设定显示内容
setContentView(myTabHost);
}
2,为TabHost添加要显示的tab,一个tab就是相应的一个选项卡。例如:
//添加tab
myTabHost.addTab(myTabHost.newTabSpec(TAB_1)//tab的Tag
.setIndicator("城市天气")//tab的标题
.setContent(R.id.tab01));//tab的显示内容
myTabHost.addTab(myTabHost.newTabSpec(TAB_2)
.setIndicator("天气详情")
.setContent(R.id.tab02));
myTabHost.addTab(myTabHost.newTabSpec(TAB_3)
.setIndicator("城市介绍")
.setContent(R.id.tab03));
3,为Tabhost添加选项卡改变监听,在选项卡改变时做相应处理。例如:
//添加OnTabChangedListener监听,此监听为选项卡改变监听
myTabHost.setOnTabChangedListener(this);
监听处理方法
publicvoidonTabChanged(StringtabId)
{
if(tabId.equals(TAB_1))
{
//初始化标签1
initTab1();
}
elseif(tabId.equals(TAB_2))
{
//初始化标签2
initTab2();
}
elseif(tabId.equals(TAB_3))
{
//初始化标签3
initTab3();
}
}
4,修改Tab显示内容
privatevoidinitTab2()
{
//得到tab内容的视图
TextViewweathDetailText=(TextView)findViewById(R.id.weath_detail);
weathDetailText.setText(weather.getLiveWeather());
}