public void initTabLayout()
{
TabHost tabHost = new TabHost( this ,null);//后面这个null一定要加,否则在addTab时会报资源找不到的错误
LinearLayout lineLayout = new LinearLayout( this );
lineLayout.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,
LinearLayout.LayoutParams.MATCH_PARENT));
lineLayout.setOrientation( LinearLayout.VERTICAL );
lineLayout.setGravity( Gravity.TOP );
TabWidget tabWidget = new TabWidget( this );
tabWidget.setId( android.R.id.tabs );
//TabHost必须有一个ID为R.id.tabs的TabWidget,内部代码是根据此ID来打出TabWidget,
//详看TabHost的无参setup方法
tabWidget.setLayoutParams( new LinearLayout.LayoutParams( -1, -2) );
FrameLayout frameLayout = new FrameLayout( this );
frameLayout.setId( android.R.id.tabcontent );//TabHost必须有一个ID为R.id.tabContent的FrameLayout
frameLayout.setLayoutParams( new LinearLayout.LayoutParams( -1, -2) );
Button b1 = new Button( this );
b1.setId(123);
b1.setText(" tab button1 ");
Button b2 = new Button( this );
b2.setId(456);
b2.setText(" tab button2 ");
frameLayout.addView( b1 );
frameLayout.addView( b2 );
lineLayout.addView( tabWidget );
lineLayout.addView( frameLayout );
tabHost.addView( lineLayout );
// Call setup() before adding tabs if loading TabHost using findViewById().
// You do not need to call setup() after getTabHost()
//在添加tabs之前要调用,当然前提是TabHost不是通过getTabHost获取,也就是说不是通过TabActivity实现
tabHost.setup();
//不能直接new TabSpec
TabSpec deviceTab = tabHost.newTabSpec("Device");
deviceTab.setIndicator( "Device Tab" );
deviceTab.setContent( b1.getId() );
TabSpec softTab = tabHost.newTabSpec("Soft");
softTab.setIndicator( "Soft Tab" );
/**
* 如果用TabHost tabHost = new TabHost( this );获取tabHost会报这种错
* Caused by: android.content.res.Resources$NotFoundException: Resource ID #0x0
* at android.content.res.Resources.getValue(Resources.java:1013)
* at android.content.res.Resources.loadXmlResourceParser(Resources.java:2098)
* at android.content.res.Resources.getLayout(Resources.java:852)
* at android.view.LayoutInflater.inflate(LayoutInflater.java:394)
* at android.widget.TabHost$LabelIndicatorStrategy.createIndicatorView(TabHost.java:543)
* at android.widget.TabHost.addTab(TabHost.java:223)
* 下面来分析原因:
* TabHost 541行:
* LayoutInflater inflater =
* (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
* View tabIndicator = inflater.inflate(mTabLayoutId,
* mTabWidget, // tab widget is the parent
* false); // no inflate params
* inflate会去查找mTabLayoutId定义的资源文件,那么mTabLayoutId又是怎么来的?
*
* TabHost有两个构造器,TabHost( Context contex )里面是没有初始化mTabLayoutId,这样对象加载后它默认为0
* 再看TabHost 82行(再第二个构造器TabHost( Context context, AttributeSet attrs)中有对它进行初始化):
* mTabLayoutId = a.getResourceId(R.styleable.TabWidget_tabLayout, 0);
* a.recycle();
* if (mTabLayoutId == 0) {
* // In case the tabWidgetStyle does not inherit from Widget.TabWidget and tabLayout is
* // not defined.
* mTabLayoutId = R.layout.tab_indicator_holo;
* }
*/
softTab.setContent( b2.getId() );
tabHost.addTab( deviceTab );
tabHost.addTab( softTab );
tabHost.setCurrentTab( 0 );
linearLayout.addView( tabHost );
}
分享到:
相关推荐
不过,Android开发中还有更高级的选项卡实现方式,比如使用ActionBar或Toolbar上的TabLayout,以及搭配ViewPager进行更复杂的页面滑动效果。这些方法通常适用于Android 3.0及以上版本,并且提供了更现代的用户体验。...
本篇文章将深入探讨如何使用TabHost在Android中实现最简单的页卡效果。 首先,我们需要理解TabHost的基本结构。TabHost通常包含两个主要组件:TabWidget和FrameLayout。TabWidget是显示页卡标签的部分,而...
然而,原始的TabHost组件在设计和自定义性方面可能无法满足所有需求,因此开发者常会选择替代方案来实现更理想的Tab效果。本教程将探讨如何利用RadioButton实现一个更美观、自定义程度更高的TabHost效果。 首先,让...
在Android开发中,TabHost和TabWidget是两个重要的组件,它们用于实现标签栏(Tab)的布局和交互。TabHost可以看作是一个容器,它管理多个小窗口(FrameLayout),每个窗口对应一个Tab,而TabWidget则负责显示这些...
在Android开发中,TabHost是实现底部导航菜单的一种传统方式,它允许用户在多个标签页之间切换,每个标签页通常代表一个不同的功能区域。本文将详细介绍如何使用TabHost来创建带有图片和文字,并且在选中时有明显...
在Android开发中,TabHost是一个非常重要的组件,它主要用于实现底部导航栏的切换效果,让用户可以在不同的内容区域之间轻松切换。TabHost结合TabWidget和FrameLayout来创建一个带有标签页的用户界面,常用于构建多...
### Android中的Tab与TabHost详解 #### 一、Tab与TabHost概述 在Android开发过程中,经常需要设计具有标签切换功能的应用界面。其中,`TabHost`是Android提供的一种实现多标签视图的方式,它可以帮助开发者创建出...
综上所述,`android Tabhost使用Demo`是一个帮助开发者学习和理解如何在Android应用中实现多Tab界面的实例。通过这个Demo,你可以了解到TabHost的基本用法,包括设置Tab、关联Activity、自定义Tab样式以及处理Tab...
在Android开发中,TabHost是一个非常重要的组件,用于创建具有多个Tab标签的界面,每个标签可以展示不同的内容或活动(Activity)。本教程将详细介绍如何使用TabHost,特别适合初学者和教学场景,例如构建一个模拟...
总结起来,Tab与TabHost是Android早期实现多标签页界面的主要手段,通过它们可以创建包含多个功能区间的应用。尽管现在有其他更现代的导航模式,理解TabHost的运作机制仍然对Android开发有着重要的历史意义。
本篇文章将深入探讨如何使用Fragment来实现TabHost的效果,以及FragmentTabHost的相关知识。 首先,理解Fragment的概念至关重要。Fragment是Android 3.0(API级别11)引入的新特性,它允许开发者在一个活动中拆分多...
在Android开发中,TabHost是一个非常重要的组件,用于创建具有多个选项卡的用户界面,每个选项卡都可以展示不同的内容或活动。本案例是为初学者设计的,旨在帮助理解如何在Android应用中有效地使用TabHost。 ...
TabHost是Android提供的一种用于实现标签页切换的组件,它可以将多个不同的Activity或者Fragment封装到不同的Tab下,用户可以通过点击Tab标签在这些页面间切换。 1. **初始化TabHost**:首先在布局文件中定义...
在Android开发中,TabHost是一个非常实用的组件,它允许我们创建带有多个选项卡的应用界面,每个选项卡可以展示不同的内容或活动。本篇文章将详细介绍如何在Android项目中使用TabHost,以及它的工作原理。 首先,...
本教程将深入讲解如何使用TabHost在Android应用中实现自定义的页签页面。 首先,我们需要理解TabHost的基本结构。TabHost包含两个主要部分:TabWidget和FrameLayout。TabWidget是显示页签的地方,而FrameLayout...
在本项目中,我们将深入探讨如何利用 `TabHost` 实现类似微信的界面切换效果。 首先,`TabHost` 是 Android SDK 提供的一个容器,它允许我们在同一个活动中展示多个 `Tab`,每个 `Tab` 对应一个不同的 `Activity` ...
为了在Android应用中实现`Tab`和`TabHost`,开发者需要遵循以下步骤: 1. **创建一个新的Tab项目**:首先,在Android Studio中创建一个新的项目,但不选择生成`MainActivity`,因为我们将自定义实现`TabHost`的逻辑...
### Android 控件之TabHost Tab页 #### 一、TabHost 概述 TabHost 是 Android 中用于实现标签页面切换的一个重要控件。通过 TabHost 可以方便地为应用程序添加多个标签页面,并且能够轻松地进行页面间的切换。...
`TabHost`是Android SDK提供的一种原生组件,用于实现这种多标签页的布局。本篇文章将深入探讨如何利用`TabHost`在Android中创建标签页。 ### 一、TabHost基本概念 `TabHost`是Android中的一个容器类,它允许...