专注收集记录技术开发学习笔记、技术难点、解决方案
网站信息搜索 >> 请输入关键词:
您当前的位置: 首页 > 移动开发

Tabhost嵌套以及Tab中兑现多个Activity跳转的使用

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

////////////////////////////////////////////////////////////////////////////////////////

[html] view plaincopy
  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="1"  
  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="8" />  
  20.   
  21. </manifest>   

//////////////////////////////////////////////////////////////////////////////////
[html] view plaincopy
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <TabHost xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     android:id="@android:id/tabhost" android:layout_width="fill_parent"  
  4.     android:layout_height="fill_parent"  
  5.     android:background="@drawable/ch">  
  6.     <LinearLayout android:orientation="vertical"  
  7.         android:layout_width="fill_parent" android:layout_height="fill_parent">  
  8.         <TabWidget android:id="@android:id/tabs"  
  9.             android:layout_alignParentBottom="true" android:layout_width="fill_parent"  
  10.             android:layout_height="wrap_content"/>  
  11.         <FrameLayout android:id="@android:id/tabcontent"  
  12.             android:layout_weight="1" android:layout_width="fill_parent"  
  13.             android:layout_height="fill_parent" />  
  14.     </LinearLayout>  
  15. </TabHost>  
  16.   
  17. ////////////////////////////////////////////////////////  
  18.   
  19. <?xml version="1.0" encoding="utf-8"?>  
  20. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  21.     android:layout_width="match_parent"  
  22.     android:layout_height="match_parent"  
  23.     android:orientation="vertical" >  
  24.     <TextView  
  25.         android:id="@+id/text1"  
  26.         android:layout_width="wrap_content"  
  27.         android:layout_height="wrap_content"  
  28.         android:text="这是tab的第二个界面">  
  29.     </TextView>  
  30.       
  31. </LinearLayout>  
  32.   
  33. //////////////////////////////////////////////////////  
  34.   
  35. <?xml version="1.0" encoding="utf-8"?>  
  36. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  37.     android:layout_width="match_parent"  
  38.     android:layout_height="match_parent"  
  39.     android:orientation="vertical" >  
  40.     <TextView  
  41.         android:id="@+id/text1"  
  42.         android:layout_width="wrap_content"  
  43.         android:layout_height="wrap_content"  
  44.         android:text="这是tab的第一个界面">  
  45.     </TextView>  
  46.      <Button android:id="@+id/btn"     
  47.         android:layout_width="wrap_content"    
  48.         android:layout_height="wrap_content"    
  49.         android:text="跳转 "/>  
  50.       
  51. </LinearLayout>  
  52.   
  53. //////////////////////////////////////////////////////  
  54.   
  55. <?xml version="1.0" encoding="utf-8"?>  
  56. <TabHost xmlns:android="http://schemas.android.com/apk/res/android"  
  57.     android:id="@+id/mytabhost" android:layout_width="fill_parent"  
  58.     android:layout_height="fill_parent"  
  59.     android:background="@drawable/yt">  
  60.     <LinearLayout android:orientation="vertical"  
  61.         android:layout_width="fill_parent" android:layout_height="fill_parent">  
  62.         <!-- 注意FrameLayoutTabWidget标签的位置-->  
  63.           
  64.         <FrameLayout android:id="@android:id/tabcontent"  
  65.             android:layout_weight="1" android:layout_width="fill_parent"  
  66.             android:layout_height="fill_parent" >  
  67.                 <TextView  
  68.                     android:id="@+id/widget59"  
  69.                     android:layout_width="wrap_content"  
  70.                     android:layout_height="wrap_content"  
  71.                     android:text="苹果IOS?"  
  72.                     android:layout_alignParentTop="true"  
  73.                     android:layout_centerHorizontal="true"  
  74.                     >  
  75.                     </TextView>  
  76.                     <TextView  
  77.                     android:id="@+id/widget60"  
  78.                     android:layout_width="wrap_content"  
  79.                     android:layout_height="wrap_content"  
  80.                     android:text="谷歌Android"  
  81.                     android:layout_alignParentTop="true"  
  82.                     android:layout_alignParentRight="true"  
  83.                     >  
  84.                     </TextView>  
  85.         </FrameLayout>  
  86.         <TabWidget android:id="@android:id/tabs"  
  87.             android:layout_alignParentBottom="true" android:layout_width="fill_parent"  
  88.             android:layout_height="wrap_content"/>  
  89.     </LinearLayout>  
  90. </TabHost>  

///////////////////////////////////////////////////////////////待会补上效果图~


友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。

其他相似内容:

热门推荐: