Android中选项卡TabHost的基本使用
今天来学习一下选项卡(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> |
大家可以比较一下两种方法的异同点,差异不是很大,创建起来也比较简单
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架