Android中选项卡TabHost的基本使用

本文详细介绍了在Android应用中如何使用TabHost组件,包括两种实现方式:一种是在布局文件中定义各选项内容,另一种是主Activity类继承TabActivity并获取TabHost实例。通过示例代码展示了如何设置选项卡标签、图标以及对应的内容布局,实现功能性的Tab栏设计。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天来学习一下选项卡(TabHost)的使用,

选项卡的使用很常见,比如说:我们在手机上面 已接来电,未接来电的分组,首先来看下实现出来的效果截图:

我们要去实现TabHost,主要有两种方法:

1、各选项内容在布局文件中定义。
2、主Activity类继承TabActivity;
3、用getTabHost()方法获取TabHost

1、直接在布局文件中定义TabHost


注意:TabWidget的id必须是@android:id/tabs,FrameLayout的id必须是 @android:id/tabcontent。


接下来使用第一种的实现方法来去实现TabHost

主Activity类:

package com.jiangqq.tabhost; import android.app.TabActivity; import android.os.Bundle; import android.view.LayoutInflater; import android.widget.TabHost; import android.widget.TabHost.TabSpec; public class TabHostActivity_Second extends TabActivity { @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); // setContentView(R.layout.tabhost_second); // 得到TabHost TabHost tabHost = this.getTabHost(); // 把自己的布局文件添加到TabHost 的FrameLayout中 【注意】很重要的一句代码 LayoutInflater.from(this).inflate(R.layout.tabhost_second, tabHost.getTabContentView(), true); // 设置选项卡 // 参数:是选项卡的标签 TabSpec parentSpec = tabHost.newTabSpec("parent"); parentSpec.setIndicator("基类", this.getResources().getDrawable(R.drawable.announcements256)); parentSpec.setContent(R.id.tab_1); TabSpec subSpec = tabHost.newTabSpec("sub"); subSpec.setIndicator("子类", this.getResources().getDrawable(R.drawable.content256)); subSpec.setContent(R.id.tab_2); tabHost.addTab(parentSpec); tabHost.addTab(subSpec); } } TabHost的布局文件:

package com.jiangqq.tabhost; import android.app.TabActivity; import android.os.Bundle; import android.view.LayoutInflater; import android.widget.TabHost; import android.widget.TabHost.TabSpec; public class TabHostActivity_Second extends TabActivity { @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); // setContentView(R.layout.tabhost_second); // 得到TabHost TabHost tabHost = this.getTabHost(); // 把自己的布局文件添加到TabHost 的FrameLayout中 【注意】很重要的一句代码 LayoutInflater.from(this).inflate(R.layout.tabhost_second, tabHost.getTabContentView(), true); // 设置选项卡 // 参数:是选项卡的标签 TabSpec parentSpec = tabHost.newTabSpec("parent"); parentSpec.setIndicator("基类", this.getResources().getDrawable(R.drawable.announcements256)); parentSpec.setContent(R.id.tab_1); TabSpec subSpec = tabHost.newTabSpec("sub"); subSpec.setIndicator("子类", this.getResources().getDrawable(R.drawable.content256)); subSpec.setContent(R.id.tab_2); tabHost.addTab(parentSpec); tabHost.addTab(subSpec); } }


然后使用第二种方法创建TabHost

主Activity类:

package com.jiangqq.tabhost; import android.app.Activity; import android.os.Bundle; import android.widget.TabHost; import android.widget.TabHost.TabSpec; /** * 本例是实现TabHost----->直接在XML文件中进行配置 【注意】在xml文件中 * TahWidget和FrameLayout标签中的ID,必须要使用Android中默认的 * * @author jiangqq * */ public class TabHostActivity_First extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.tabhost_first); // 获取TabHost TabHost tabHost = (TabHost) findViewById(R.id.tabs); tabHost.setup(); // 设置选项卡 // 参数:是选项卡的标签 TabSpec parentSpec = tabHost.newTabSpec("parent"); parentSpec.setIndicator("基类", this.getResources().getDrawable(R.drawable.announcements256)); parentSpec.setContent(R.id.tab_1); TabSpec subSpec = tabHost.newTabSpec("sub"); subSpec.setIndicator("子类", this.getResources().getDrawable(R.drawable.content256)); subSpec.setContent(R.id.tab_2); tabHost.addTab(parentSpec); tabHost.addTab(subSpec); } }

布局文件:

<?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" > <TabHost android:id="@+id/tabs" android:layout_width="fill_parent" android:layout_height="fill_parent" > <LinearLayout android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <TabWidget android:id="@android:id/tabs" android:layout_width="fill_parent" android:layout_height="wrap_content" > </TabWidget> <FrameLayout android:id="@android:id/tabcontent" android:layout_width="fill_parent" android:layout_height="fill_parent" > <TextView android:id="@+id/tab_1" android:layout_width="fill_parent" android:layout_height="fill_parent" android:text="jiangqq_TabHostDemo_First" > </TextView> <TextView android:id="@+id/tab_2" android:layout_width="fill_parent" android:layout_height="fill_parent" android:text="jiangqq_TabHostDemo_Second" > </TextView> </FrameLayout> </LinearLayout> </TabHost> </LinearLayout>


大家可以比较一下两种方法的异同点,差异不是很大,创建起来也比较简单

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值