`
smiky
  • 浏览: 257800 次
  • 性别: Icon_minigender_1
  • 来自: 天门
社区版块
存档分类
最新评论

android不用xml实现Tab效果(TabHost学习)

 
阅读更多

 

 

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选项卡Tab菜单TabHost(一)同一Activity上实现

    不过,Android开发中还有更高级的选项卡实现方式,比如使用ActionBar或Toolbar上的TabLayout,以及搭配ViewPager进行更复杂的页面滑动效果。这些方法通常适用于Android 3.0及以上版本,并且提供了更现代的用户体验。...

    android 页卡效果,用tabhost实现最简单的页卡效果

    本篇文章将深入探讨如何使用TabHost在Android中实现最简单的页卡效果。 首先,我们需要理解TabHost的基本结构。TabHost通常包含两个主要组件:TabWidget和FrameLayout。TabWidget是显示页卡标签的部分,而...

    android 利用radiobutton实现tabhost效果

    然而,原始的TabHost组件在设计和自定义性方面可能无法满足所有需求,因此开发者常会选择替代方案来实现更理想的Tab效果。本教程将探讨如何利用RadioButton实现一个更美观、自定义程度更高的TabHost效果。 首先,让...

    Tab-TabHost.zip_Tabú_tabhost

    在Android开发中,TabHost和TabWidget是两个重要的组件,它们用于实现标签栏(Tab)的布局和交互。TabHost可以看作是一个容器,它管理多个小窗口(FrameLayout),每个窗口对应一个Tab,而TabWidget则负责显示这些...

    android Tabhost 实现底部菜单效果

    在Android开发中,TabHost是实现底部导航菜单的一种传统方式,它允许用户在多个标签页之间切换,每个标签页通常代表一个不同的功能区域。本文将详细介绍如何使用TabHost来创建带有图片和文字,并且在选中时有明显...

    android的tabhost学习

    在Android开发中,TabHost是一个非常重要的组件,它主要用于实现底部导航栏的切换效果,让用户可以在不同的内容区域之间轻松切换。TabHost结合TabWidget和FrameLayout来创建一个带有标签页的用户界面,常用于构建多...

    史上最全的Android的Tab与TabHost.txt

    ### Android中的Tab与TabHost详解 #### 一、Tab与TabHost概述 在Android开发过程中,经常需要设计具有标签切换功能的应用界面。其中,`TabHost`是Android提供的一种实现多标签视图的方式,它可以帮助开发者创建出...

    android Tabhost使用Demo

    综上所述,`android Tabhost使用Demo`是一个帮助开发者学习和理解如何在Android应用中实现多Tab界面的实例。通过这个Demo,你可以了解到TabHost的基本用法,包括设置Tab、关联Activity、自定义Tab样式以及处理Tab...

    TabHost的使用方法

    在Android开发中,TabHost是一个非常重要的组件,用于创建具有多个Tab标签的界面,每个标签可以展示不同的内容或活动(Activity)。本教程将详细介绍如何使用TabHost,特别适合初学者和教学场景,例如构建一个模拟...

    Tab与TabHost

    总结起来,Tab与TabHost是Android早期实现多标签页界面的主要手段,通过它们可以创建包含多个功能区间的应用。尽管现在有其他更现代的导航模式,理解TabHost的运作机制仍然对Android开发有着重要的历史意义。

    Android最火的Framment实现tabhost效果

    本篇文章将深入探讨如何使用Fragment来实现TabHost的效果,以及FragmentTabHost的相关知识。 首先,理解Fragment的概念至关重要。Fragment是Android 3.0(API级别11)引入的新特性,它允许开发者在一个活动中拆分多...

    Android的tabHost案例

    在Android开发中,TabHost是一个非常重要的组件,用于创建具有多个选项卡的用户界面,每个选项卡都可以展示不同的内容或活动。本案例是为初学者设计的,旨在帮助理解如何在Android应用中有效地使用TabHost。 ...

    android使用了自定义button自定义tabHost切换页面Demo

    TabHost是Android提供的一种用于实现标签页切换的组件,它可以将多个不同的Activity或者Fragment封装到不同的Tab下,用户可以通过点击Tab标签在这些页面间切换。 1. **初始化TabHost**:首先在布局文件中定义...

    android TabHost简单使用

    在Android开发中,TabHost是一个非常实用的组件,它允许我们创建带有多个选项卡的应用界面,每个选项卡可以展示不同的内容或活动。本篇文章将详细介绍如何在Android项目中使用TabHost,以及它的工作原理。 首先,...

    Android-TabHost.rar_android_android tabhost_tabhost_tabhost andr

    本教程将深入讲解如何使用TabHost在Android应用中实现自定义的页签页面。 首先,我们需要理解TabHost的基本结构。TabHost包含两个主要部分:TabWidget和FrameLayout。TabWidget是显示页签的地方,而FrameLayout...

    androidTabhost界面切换

    在本项目中,我们将深入探讨如何利用 `TabHost` 实现类似微信的界面切换效果。 首先,`TabHost` 是 Android SDK 提供的一个容器,它允许我们在同一个活动中展示多个 `Tab`,每个 `Tab` 对应一个不同的 `Activity` ...

    andriod 开发笔记 Tab与TabHost

    为了在Android应用中实现`Tab`和`TabHost`,开发者需要遵循以下步骤: 1. **创建一个新的Tab项目**:首先,在Android Studio中创建一个新的项目,但不选择生成`MainActivity`,因为我们将自定义实现`TabHost`的逻辑...

    Android 控件之TabHost Tab页

    ### Android 控件之TabHost Tab页 #### 一、TabHost 概述 TabHost 是 Android 中用于实现标签页面切换的一个重要控件。通过 TabHost 可以方便地为应用程序添加多个标签页面,并且能够轻松地进行页面间的切换。...

    android通过tabhost实现标签页

    `TabHost`是Android SDK提供的一种原生组件,用于实现这种多标签页的布局。本篇文章将深入探讨如何利用`TabHost`在Android中创建标签页。 ### 一、TabHost基本概念 `TabHost`是Android中的一个容器类,它允许...

Global site tag (gtag.js) - Google Analytics