Tabhost嵌套以及Tab中多个Activity跳转的实现

做了一个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>  
原文地址:https://www.cnblogs.com/zhujiabin/p/4347262.html