做了一个demo,先看看效果图:
源码 如下:
(1) DoubleTabHost package yy.android.tab; import android.app.TabActivity; import android.content.Intent; import android.os.Bundle; import android.widget.TabHost; public class DoubleTabHost extends TabActivity { /* 注意: * 对于TabHost、布局文件中必须包含 * TabHost、TabWidget 、FrameLayout * 如果继承TabActivity,并且通过getTabHost()方法来获取TabHost * 那么三者的ID必须是android.R.id.tabhost、android.R.id.tabs、android.R.id.tabcontent * 如果继承Activity,可以通过findViewById来获取这三个组件,此时ID可自定义 */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); //获得TabHost TabHost mTabHost = getTabHost(); //新建一个tab并设置它的,Tag,标题,图标,内容 mTabHost.addTab(mTabHost.newTabSpec("YouTube").setIndicator( "YouTube", getResources().getDrawable(android.R.drawable.arrow_down_float)).setContent( new Intent(this, SubTab.class))); mTabHost.addTab(mTabHost.newTabSpec("Chrome").setIndicator( "Chrome", getResources().getDrawable(android.R.drawable.arrow_down_float)).setContent( new Intent(this, YActivityGroup.class))); mTabHost.setCurrentTab(0);//设置初始选中状态为第一个tab } } ////////////////////////////////////////////////////////////////////////////////////// (2)YTabDActivity package yy.android.tab; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.view.Window; import android.widget.Button; public class YTabDActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.normal); Button btn = (Button) findViewById(R.id.btn); btn.setOnClickListener(new OnClickListener() { public void onClick(View v) { // TODO Auto-generated method stub Intent intent = new Intent(YTabDActivity.this, SecondActivity.class). addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); //把一个Activity转换成一个View Window w = YActivityGroup.group.getLocalActivityManager() .startActivity("SecondActivity",intent); View view = w.getDecorView(); //把View添加大ActivityGroup中 YActivityGroup.group.setContentView(view); } }); } } ////////////////////////////////////////////////////////////////////////////////////////// (3)YActivityGroup package yy.android.tab; import android.app.ActivityGroup; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.view.Window; public class YActivityGroup extends ActivityGroup{ /** * 一个静态的ActivityGroup变量,用于管理本Group中的Activity */ public static ActivityGroup group; @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); group = this; } @Override//按返回键时 public void onBackPressed() { // TODO Auto-generated method stub //super.onBackPressed(); //把后退事件交给子Activity处理 group.getLocalActivityManager() .getCurrentActivity().onBackPressed(); } @Override //从新获得焦点时 protected void onResume() { // TODO Auto-generated method stub super.onResume(); //把界面切换放到onResume方法中是因为,从其他选项卡切换回来时, //调用搞得是onResume方法 //要跳转的界面 Intent intent = new Intent(this, YTabDActivity.class). addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); //把一个Activity转换成一个View Window w = group.getLocalActivityManager().startActivity("YTabDActivity",intent); View view = w.getDecorView(); //把View添加大ActivityGroup中 group.setContentView(view); } } //////////////////////////////////////////////////////////////////////////////// (4) SubTab package yy.android.tab; import android.app.Activity; import android.os.Bundle; import android.widget.TabHost; import android.widget.TabWidget; import android.widget.TextView; public class SubTab extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.subtab); //获得TabHost TabHost mTabHost = (TabHost)findViewById(R.id.mytabhost); //当时通过findViewById来获得tabhost的而不是getTabHost获得的,在添加tab之前都需要setup mTabHost.setup(); TabWidget tabWidget = mTabHost.getTabWidget(); mTabHost.addTab(mTabHost.newTabSpec("湖人").setIndicator( "湖人").setContent(R.id.widget59)); mTabHost.addTab(mTabHost.newTabSpec("热火").setIndicator( "热火").setContent(R.id.widget60)); mTabHost.addTab(mTabHost.newTabSpec("雷霆").setIndicator( "雷霆").setContent(R.id.widget60)); mTabHost.addTab(mTabHost.newTabSpec("凯尔特人").setIndicator( "凯尔特人").setContent(R.id.widget60)); mTabHost.setCurrentTab(0);//设置初始时,第一个tab为选中状态 int height =30; // int width =45; //tabWidget.getChildCount()是tab个数 for (int i =0; i < tabWidget.getChildCount(); i++) { /**设置高度、宽度,由于宽度设置为fill_parent,在此对它没效果 */ tabWidget.getChildAt(i).getLayoutParams().height = height; // tabWidget.getChildAt(i).getLayoutParams().width = width; /**设置tab中标题文字的颜色,不然默认为黑色 */ final TextView tv = (TextView) tabWidget.getChildAt(i).findViewById(android.R.id.title); tv.setTextColor(this.getResources().getColorStateList(android.R.color.white)); } } } ///////////////////////////////////////////////////////////////////////////////// (5)SecondActivity package yy.android.tab; import android.app.Activity; import android.os.Bundle; public class SecondActivity extends Activity{ @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.group); } }
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="yy.android.tab" android:versionCode="1" android:versionName="1.0"> <application android:icon="@drawable/icon" android:label="@string/app_name"> <activity android:name=".DoubleTabHost" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name=".YActivityGroup"/> <activity android:name=".YTabDActivity"/> <activity android:name=".SubTab"/> <activity android:name=".SecondActivity"/> </application> <uses-sdk android:minSdkVersion="8" /> </manifest>
(1)main.xml <?xml version="1.0" encoding="utf-8"?> <TabHost xmlns:android="http://schemas.android.com/apk/res/android" android:id="@android:id/tabhost" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="@drawable/ch"> <LinearLayout android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <TabWidget android:id="@android:id/tabs" android:layout_alignParentBottom="true" android:layout_width="fill_parent" android:layout_height="wrap_content"/> <FrameLayout android:id="@android:id/tabcontent" android:layout_weight="1" android:layout_width="fill_parent" android:layout_height="fill_parent" /> </LinearLayout> </TabHost> //////////////////////////////////////////////////////// (2)group.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <TextView android:id="@+id/text1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="这是tab的第二个界面"> </TextView> </LinearLayout> ////////////////////////////////////////////////////// (3)normal.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <TextView android:id="@+id/text1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="这是tab的第一个界面"> </TextView> <Button android:id="@+id/btn" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="跳转 "/> </LinearLayout> ////////////////////////////////////////////////////// (4)subtab.xml <?xml version="1.0" encoding="utf-8"?> <TabHost xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/mytabhost" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="@drawable/yt"> <LinearLayout android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <!-- 注意FrameLayoutTabWidget标签的位置--> <FrameLayout android:id="@android:id/tabcontent" android:layout_weight="1" android:layout_width="fill_parent" android:layout_height="fill_parent" > <TextView android:id="@+id/widget59" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="苹果IOS?" android:layout_alignParentTop="true" android:layout_centerHorizontal="true" > </TextView> <TextView android:id="@+id/widget60" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="谷歌Android" android:layout_alignParentTop="true" android:layout_alignParentRight="true" > </TextView> </FrameLayout> <TabWidget android:id="@android:id/tabs" android:layout_alignParentBottom="true" android:layout_width="fill_parent" android:layout_height="wrap_content"/> </LinearLayout> </TabHost>