做了一个demo,先看看效果图:

源码 如下:

  1. () DoubleTabHost
  2. package yy.android.tab;
  3.  
  4. import android.app.TabActivity;
  5. import android.content.Intent;
  6. import android.os.Bundle;
  7. import android.widget.TabHost;
  8.  
  9. public class DoubleTabHost extends TabActivity {
  10.  
  11. /* 注意:
  12. * 对于TabHost、布局文件中必须包含
  13. * TabHost、TabWidget 、FrameLayout
  14. * 如果继承TabActivity,并且通过getTabHost()方法来获取TabHost
  15. * 那么三者的ID必须是android.R.id.tabhost、android.R.id.tabs、android.R.id.tabcontent
  16. * 如果继承Activity,可以通过findViewById来获取这三个组件,此时ID可自定义
  17. */
  18. @Override
  19. public void onCreate(Bundle savedInstanceState) {
  20. super.onCreate(savedInstanceState);
  21. setContentView(R.layout.main);
  22. //获得TabHost
  23. TabHost mTabHost = getTabHost();
  24. //新建一个tab并设置它的,Tag,标题,图标,内容
  25. mTabHost.addTab(mTabHost.newTabSpec("YouTube").setIndicator(
  26. "YouTube",
  27. getResources().getDrawable(android.R.drawable.arrow_down_float)).setContent(
  28. new Intent(this, SubTab.class)));
  29. mTabHost.addTab(mTabHost.newTabSpec("Chrome").setIndicator(
  30. "Chrome",
  31. getResources().getDrawable(android.R.drawable.arrow_down_float)).setContent(
  32. new Intent(this, YActivityGroup.class)));
  33. mTabHost.setCurrentTab();//设置初始选中状态为第一个tab
  34. }
  35. }
  36.  
  37. //////////////////////////////////////////////////////////////////////////////////////
  38.  
  39. ()YTabDActivity
  40. package yy.android.tab;
  41.  
  42. import android.app.Activity;
  43. import android.content.Intent;
  44. import android.os.Bundle;
  45. import android.view.View;
  46. import android.view.View.OnClickListener;
  47. import android.view.Window;
  48. import android.widget.Button;
  49.  
  50. public class YTabDActivity extends Activity {
  51. @Override
  52. public void onCreate(Bundle savedInstanceState) {
  53. super.onCreate(savedInstanceState);
  54. setContentView(R.layout.normal);
  55.  
  56. Button btn = (Button) findViewById(R.id.btn);
  57. btn.setOnClickListener(new OnClickListener() {
  58.  
  59. public void onClick(View v) {
  60. // TODO Auto-generated method stub
  61. Intent intent = new Intent(YTabDActivity.this, SecondActivity.class).
  62. addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
  63. //把一个Activity转换成一个View
  64. Window w = YActivityGroup.group.getLocalActivityManager()
  65. .startActivity("SecondActivity",intent);
  66. View view = w.getDecorView();
  67. //把View添加大ActivityGroup中
  68. YActivityGroup.group.setContentView(view);
  69. }
  70. });
  71. }
  72. }
  73. //////////////////////////////////////////////////////////////////////////////////////////
  74.  
  75. ()YActivityGroup
  76. package yy.android.tab;
  77.  
  78. import android.app.ActivityGroup;
  79. import android.content.Intent;
  80. import android.os.Bundle;
  81. import android.view.View;
  82. import android.view.Window;
  83.  
  84. public class YActivityGroup extends ActivityGroup{
  85. /**
  86. * 一个静态的ActivityGroup变量,用于管理本Group中的Activity
  87. */
  88. public static ActivityGroup group;
  89.  
  90. @Override
  91. protected void onCreate(Bundle savedInstanceState) {
  92. // TODO Auto-generated method stub
  93. super.onCreate(savedInstanceState);
  94.  
  95. group = this;
  96.  
  97. }
  98.  
  99. @Override//按返回键时
  100. public void onBackPressed() {
  101. // TODO Auto-generated method stub
  102. //super.onBackPressed();
  103. //把后退事件交给子Activity处理
  104. group.getLocalActivityManager()
  105. .getCurrentActivity().onBackPressed();
  106. }
  107.  
  108. @Override //从新获得焦点时
  109. protected void onResume() {
  110. // TODO Auto-generated method stub
  111. super.onResume();
  112. //把界面切换放到onResume方法中是因为,从其他选项卡切换回来时,
  113. //调用搞得是onResume方法
  114.  
  115. //要跳转的界面
  116. Intent intent = new Intent(this, YTabDActivity.class).
  117. addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
  118. //把一个Activity转换成一个View
  119. Window w = group.getLocalActivityManager().startActivity("YTabDActivity",intent);
  120. View view = w.getDecorView();
  121. //把View添加大ActivityGroup中
  122. group.setContentView(view);
  123. }
  124. }
  125. ////////////////////////////////////////////////////////////////////////////////
  126.  
  127. () SubTab
  128. package yy.android.tab;
  129.  
  130. import android.app.Activity;
  131. import android.os.Bundle;
  132. import android.widget.TabHost;
  133. import android.widget.TabWidget;
  134. import android.widget.TextView;
  135.  
  136. public class SubTab extends Activity {
  137.  
  138. @Override
  139. public void onCreate(Bundle savedInstanceState) {
  140. super.onCreate(savedInstanceState);
  141. setContentView(R.layout.subtab);
  142.  
  143. //获得TabHost
  144. TabHost mTabHost = (TabHost)findViewById(R.id.mytabhost);
  145. //当时通过findViewById来获得tabhost的而不是getTabHost获得的,在添加tab之前都需要setup
  146. mTabHost.setup();
  147. TabWidget tabWidget = mTabHost.getTabWidget();
  148.  
  149. mTabHost.addTab(mTabHost.newTabSpec("湖人").setIndicator(
  150. "湖人").setContent(R.id.widget59));
  151. mTabHost.addTab(mTabHost.newTabSpec("热火").setIndicator(
  152. "热火").setContent(R.id.widget60));
  153. mTabHost.addTab(mTabHost.newTabSpec("雷霆").setIndicator(
  154. "雷霆").setContent(R.id.widget60));
  155. mTabHost.addTab(mTabHost.newTabSpec("凯尔特人").setIndicator(
  156. "凯尔特人").setContent(R.id.widget60));
  157. mTabHost.setCurrentTab();//设置初始时,第一个tab为选中状态
  158.  
  159. int height =;
  160. // int width =45;
  161. //tabWidget.getChildCount()是tab个数
  162. for (int i =; i < tabWidget.getChildCount(); i++) {
  163.  
  164. /**设置高度、宽度,由于宽度设置为fill_parent,在此对它没效果 */
  165. tabWidget.getChildAt(i).getLayoutParams().height = height;
  166. // tabWidget.getChildAt(i).getLayoutParams().width = width;
  167. /**设置tab中标题文字的颜色,不然默认为黑色 */
  168. final TextView tv = (TextView) tabWidget.getChildAt(i).findViewById(android.R.id.title);
  169. tv.setTextColor(this.getResources().getColorStateList(android.R.color.white));
  170. }
  171. }
  172. }
  173. /////////////////////////////////////////////////////////////////////////////////
  174.  
  175. ()SecondActivity
  176. package yy.android.tab;
  177.  
  178. import android.app.Activity;
  179. import android.os.Bundle;
  180.  
  181. public class SecondActivity extends Activity{
  182.  
  183. @Override
  184. protected void onCreate(Bundle savedInstanceState) {
  185. // TODO Auto-generated method stub
  186. super.onCreate(savedInstanceState);
  187. setContentView(R.layout.group);
  188. }
  189. }
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <manifest xmlns:android="http://schemas.android.com/apk/res/android"
  3. package="yy.android.tab"
  4. android:versionCode=""
  5. android:versionName="1.0">
  6. <application android:icon="@drawable/icon" android:label="@string/app_name">
  7. <activity android:name=".DoubleTabHost"
  8. android:label="@string/app_name">
  9. <intent-filter>
  10. <action android:name="android.intent.action.MAIN" />
  11. <category android:name="android.intent.category.LAUNCHER" />
  12. </intent-filter>
  13. </activity>
  14. <activity android:name=".YActivityGroup"/>
  15. <activity android:name=".YTabDActivity"/>
  16. <activity android:name=".SubTab"/>
  17. <activity android:name=".SecondActivity"/>
  18. </application>
  19. <uses-sdk android:minSdkVersion="" />
  20.  
  21. </manifest>
  1. ()main.xml
  2.  
  3. <?xml version="1.0" encoding="utf-8"?>
  4. <TabHost xmlns:android="http://schemas.android.com/apk/res/android"
  5. android:id="@android:id/tabhost" android:layout_width="fill_parent"
  6. android:layout_height="fill_parent"
  7. android:background="@drawable/ch">
  8. <LinearLayout android:orientation="vertical"
  9. android:layout_width="fill_parent" android:layout_height="fill_parent">
  10. <TabWidget android:id="@android:id/tabs"
  11. android:layout_alignParentBottom="true" android:layout_width="fill_parent"
  12. android:layout_height="wrap_content"/>
  13. <FrameLayout android:id="@android:id/tabcontent"
  14. android:layout_weight="" android:layout_width="fill_parent"
  15. android:layout_height="fill_parent" />
  16. </LinearLayout>
  17. </TabHost>
  18.  
  19. ////////////////////////////////////////////////////////
  20.  
  21. ()group.xml
  22. <?xml version="1.0" encoding="utf-8"?>
  23. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  24. android:layout_width="match_parent"
  25. android:layout_height="match_parent"
  26. android:orientation="vertical" >
  27. <TextView
  28. android:id="@+id/text1"
  29. android:layout_width="wrap_content"
  30. android:layout_height="wrap_content"
  31. android:text="这是tab的第二个界面">
  32. </TextView>
  33.  
  34. </LinearLayout>
  35.  
  36. //////////////////////////////////////////////////////
  37.  
  38. ()normal.xml
  39. <?xml version="1.0" encoding="utf-8"?>
  40. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  41. android:layout_width="match_parent"
  42. android:layout_height="match_parent"
  43. android:orientation="vertical" >
  44. <TextView
  45. android:id="@+id/text1"
  46. android:layout_width="wrap_content"
  47. android:layout_height="wrap_content"
  48. android:text="这是tab的第一个界面">
  49. </TextView>
  50. <Button android:id="@+id/btn"
  51. android:layout_width="wrap_content"
  52. android:layout_height="wrap_content"
  53. android:text="跳转 "/>
  54.  
  55. </LinearLayout>
  56.  
  57. //////////////////////////////////////////////////////
  58.  
  59. ()subtab.xml
  60. <?xml version="1.0" encoding="utf-8"?>
  61. <TabHost xmlns:android="http://schemas.android.com/apk/res/android"
  62. android:id="@+id/mytabhost" android:layout_width="fill_parent"
  63. android:layout_height="fill_parent"
  64. android:background="@drawable/yt">
  65. <LinearLayout android:orientation="vertical"
  66. android:layout_width="fill_parent" android:layout_height="fill_parent">
  67. <!-- 注意FrameLayout\TabWidget标签的位置-->
  68.  
  69. <FrameLayout android:id="@android:id/tabcontent"
  70. android:layout_weight="" android:layout_width="fill_parent"
  71. android:layout_height="fill_parent" >
  72. <TextView
  73. android:id="@+id/widget59"
  74. android:layout_width="wrap_content"
  75. android:layout_height="wrap_content"
  76. android:text="苹果IOS?"
  77. android:layout_alignParentTop="true"
  78. android:layout_centerHorizontal="true"
  79. >
  80. </TextView>
  81. <TextView
  82. android:id="@+id/widget60"
  83. android:layout_width="wrap_content"
  84. android:layout_height="wrap_content"
  85. android:text="谷歌Android"
  86. android:layout_alignParentTop="true"
  87. android:layout_alignParentRight="true"
  88. >
  89. </TextView>
  90. </FrameLayout>
  91. <TabWidget android:id="@android:id/tabs"
  92. android:layout_alignParentBottom="true" android:layout_width="fill_parent"
  93. android:layout_height="wrap_content"/>
  94. </LinearLayout>
  95. </TabHost>

Tabhost嵌套以及Tab中多个Activity跳转的实现的更多相关文章

  1. vue中嵌套的iframe中控制路由的跳转及传参

    在iframe引入的页面中,通过事件触发的方式进行传递参数,其中data是一个标识符的作用,在main.js中通过data进行判断,params是要传递的参数 //iframe向vue传递跳转路由的参 ...

  2. tabhost中activity跳转动画不显示的解决办法

    [1]如果是tabhost中的activity跳到其他的activity,用这篇blog的方法即可 http://blog.sina.com.cn/s/blog_8db8914301010t31.ht ...

  3. 仅在TabControl中的Tab中添加右键菜单

    若想实现仅在TabControl中的Tab中添加右键菜单,可在XAML中通过使用样式得到: <TabControl> <TabControl.ItemContainerStyle&g ...

  4. Android中突发情况Activity数据的保存和恢复

    Android中突发情况Activity数据的保存和恢复 写在前面:在我们的APP使用的过程中,总有可能出现各种手滑.被压在后台.甚至突然被杀死的情况.所以对APP中一些临时数据或关键持久型数据,就需 ...

  5. 关于ViewPager被嵌套在ScrollView中不显示的问题

    关于ViewPager被嵌套在ScrollView中不显示的问题 进入全屏 ScrollView 嵌套ViewPager,要不是业务需求这样,估计没人愿意这么干!因为这种方式,会问题多多,简单百度一下 ...

  6. WPF触屏Touch事件在嵌套控件中的响应问题

    前几天遇到个touch事件的坑,记录下来以增强理解. 具体是 想把一个listview嵌套到另一个listview,这时候如果list view(子listview)的内容过多超过容器高度,它是不会出 ...

  7. android开发中关于继承activity类中方法的调用

    android开发中关于继承activity类中的函数,不能在其他类中调用其方法. MainActivity.java package com.example.testmain; import and ...

  8. 如何将同一个APP中的不同activity在Recent(最近任务)中显示?

    需求描述 在应用Application1中存在A.B两个activity,当在应用启动了A.B activity,点击Recent键,如何让A.B两个activity都显示在Recent界面(最近任务 ...

  9. 在一个activity中销毁指定activity

    通过静态变量的方法: 1.在Aactivity中设置一个Activity静态变量 static Activity activity; 2.在onCreate中: activity=this: 3.在B ...

随机推荐

  1. Css样式之overflow

    1:overflow属性的可能取值有4种:visible,hidden,scroll,和auto 1) visible:不裁剪溢出的内容.浏览器将把溢出的内容呈现在其容器的显示区域之外,全部内容都可见 ...

  2. Git 常用配置和使用

    Git:是一个分布式的源代码管理工具,Linux内核的代码就是用Git管理的所以它很强,也很快, 和 Vss/SVN比起来 本地Git初始化配置及其使用: 1. 初始化本地Git库:打开Git Bas ...

  3. 最全的ASP.NET开源CMS汇总

    转载:http://www.cnblogs.com/cxd4321/archive/2011/11/16/2250707.html 国内: 1.SiteServer CMS SiteServer CM ...

  4. android线程池ThreadPoolExecutor的理解

    android线程池ThreadPoolExecutor的理解 线程池 我自己理解看来.线程池顾名思义就是一个容器的意思,容纳的就是ThreadorRunable, 注意:每一个线程都是需要CPU分配 ...

  5. problems record

    1,java类中字体MS Gothic 2,得到请求资源,例如,http://localhost:8080 public static URL serverURL(HttpServletRequest ...

  6. win10 Administrator

    和Win7/Win8.1一样,Win10的管理员账户Administrator是默认隐藏和关闭的,因为该账户权限极高,被不法分子利用后存在极大风险.但如果你想在某些特殊情况下使用该账户,就需要手动将其 ...

  7. web services 接口测试方法

    public class Test { public static void main(String[] args) { JaxWsProxyFactoryBean factory = new Jax ...

  8. Linux FTP的安装与配置(转)

    Linux FTP的安装与配置   ftp安装部分,操作步骤如下: 可以使用yum命令直接安装ftp # yum install vsftpd ftp服务的开启与关闭命令: 开启:# service  ...

  9. mybatis()

    ---------------------------------mysql分页---------------------------------- public void selectList(in ...

  10. 《sort命令的k选项大讨论》-linux命令五分钟系列之二十七

    本原创文章属于<Linux大棚>博客,博客地址为http://roclinux.cn.文章作者为rocrocket. 为了防止某些网站的恶性转载,特在每篇文章前加入此信息,还望读者体谅. ...