android里提供了tab显示的机制。既可以继承TabActivity类也可以自己直接在普通的Activity中实现。下面讲讲这2种方法的相似和不同。
1.继承TabActivity
首先需要得到一个TabHost对象,在TabActivity中可以通过getTabHost()方法来获得TabHost对象,getTabHost的源码如下:
public TabHost getTabHost() {
ensureTabHost();
return mTabHost;
}
private void ensureTabHost() {
if (mTabHost == null) {
this.setContentView(com.android.internal.R.layout.tab_content);
}
}
事实上在TabActivity中已经给你指定好了一个layout来专门用作tab显示,com.android.internal.R.layout.tab_content的原型如下:
<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" android:layout_weight="0" />
<FrameLayout android:id="@android:id/tabcontent"
android:layout_width="fill_parent" android:layout_height="0dip"
android:layout_weight="1"/>
</LinearLayout>
</TabHost>
这里面必须包含3个元素,LinearLayout,TabWidget以及FrameLayout,我猜测TabWidget应该就是显示标签的组件,而FrameLayout是可以重叠覆盖的,因而当你选择某个标签的时候,其相应的内容就显示到framelayout里面,那么之前的标签页就被覆盖掉了。
然后你需要在framelayout上面来添加你自己想显示的view,通常的方式是你自己定义一个layout,然后inflate他并把framelayout作为他的rootgroup,
LayoutInflater inflater_tab1 = LayoutInflater.from(this);
inflater_tab1.inflate(R.layout.tab1, mTabHost.getTabContentView());
最后需要在TabHost中添加你的Tab
调用mTabHost.addTab方法即可,这个方法能够在tab中显示文字,图片以及tab下显示的视图。
2.在Activity中实现
这里你需要自己来实现TagHost的layout,可以在layout.main中添加TabHost元素,但是注意的是,必须实现上面所说的3个组件,而且注意id应该是系统所指定的那些id。而余下的事情就和上面类似了。