原文地址:
http://developer.android.com/resources/tutorials/views/hello-tabwidget.html
翻译:
你需要一个TabHost和一个TabWidget来创建一个带Tab的界面,TabHost必须是Layout的根节点,该Layout文件还必须包换TabWidget来显示Tabs和一个FrameLayout来显示Tab的内容。
Tab内容的实现有两种,1.使用Tabs在同一个活动Activity种切换视图Views,或者使用Tabs来切换不同的活动.使用哪种方法完全取决于你自己的需要,不过如果每个Tab提供完全不同的用户活动,那更优的方法是让每个Tab都使用独立的活动,这样的设计比把所有的东西都写在一个活动和Layout中更方便管理。
在这个介绍中,我将为每个Tab创建独立的活动:
1. 创建一个名为"HelloTabWidget"的新项目:
2. 首先,在你的项目中创建三个独立的活动类,ArtistsActivity,AlbumsActivity和SongsActivity。这些类每个都代表着一个独立的Tab。现在,使用TextView让每个活动都显示一个简单的信息,比如:
- 注意这里没有使用Layout的XML文件,只是创建了一个TextView,给它一段Text并把它设置成内容Content. 给三个活动类都做类似的事情。让后再Android Manifest文件中加入<activity/> 标签。
- 你需要为每个Tab设置图标,你应该为每个图标创建两个版本,一个为了当这个图标被选择的时候,一个为了未被选择的时候。当然公认推荐的做法是被选择的图标为深色的(灰),未被选择的图标为亮色的(白色),比如:
在这个介绍中,你可以复制以上图片并在所有三个Tabs中使用它们(当你在你自己的应用中创建Tabs,你应该创建自定义的Tab 图标)。
现在创建一个state-list drawable的文件声明为每一个Tab状态State该使用哪张图片:
1. 把图标文件导入在res/drawable/目录里
2. 在res/drawable/里创建一个新的名为ic_tab_artists.xml的文件输入代码如下
这是一个state-list drawable,你将把它应用程你TAB的图像,当TAB的状态改变,TAB的图标也会自动在这里定义的图像间切换。
4. 打开res/layout/main.xml然后输入以下代码
以上创建的Layout是将显示TABS以及提供各活动间导航的Layout.
Tabhost对象要求在他内部的某个地方要包含有一个TabWidget和一个FrameLayout.为了将TabWidget和FrameLayout垂直摆放,这里使用一个线性布局Linear Layout.FrameLayout是显示每个TAB内容的地方。现在FrameLayout是空的是由于TabHost会自动将活动填充到里面
注意,TabWidget和FrameLayout组件的ID是tabs和tabcontent,这里必须要使用这两个ID,这样TabHost才可以取得它们的引用
5. 现在打开HelloTabWidget.java,使它继承于TabActivity
6. 将下列代码作为该类的onCreate()方法
以上代码设置了每个TAB的标题和图标,然后给每个分配了一个活动
首先TabHost的引用由getTabHost()函数返回。然后,为每个TAB,一个TabHost.TabSpec对象被创建用来定义TAB的属性。方法newTabSpec(String)被用来创建一个新的标识为输入的字符串的TabHost.TabSpec对象。为每个Tab,setIndicator(CharSequence,Drawable)方法被调用来定义该TAB得标题和图标。setContent(Intent)被调用用来指定打开适当活动的Intent。然后每个TabHost.TabSpec通过调用addTab(TabHost.TabSpec)方法被添加到TabHost。
在最后,setCurrentTab(int)方法定义了默认被选中显示的Tab,输入的INT值为被默认选中的TAB的索引位置。
注意到TabWidget对象没有被引用过。这是因为一个TabWidget对象一定一直是一个你用来完成几乎所有和TABS有关互动的TabHost的一个孩子。所以当一个TAB被添加到TabHost的时候,他也会自动被添加到孩子TabWidget里。
7. 现在打开Android Manifest文件,添加NoTitleBar主题到HelloTabWidget的<activity>标签内,这将会自动去除默认的应用程序顶部的标题,给Tabs提供更多的空间,现在<activity>标签看起来应该是这样的:
8. 运行程序
你的程序大致上应该是这样滴!