zoukankan      html  css  js  c++  java
  • 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>  
  • 相关阅读:
    HUST 1372 marshmallow
    HUST 1371 Emergency relief
    CodeForces 629D Babaei and Birthday Cake
    CodeForces 629C Famil Door and Brackets
    ZOJ 3872 Beauty of Array
    ZOJ 3870 Team Formation
    HDU 5631 Rikka with Graph
    HDU 5630 Rikka with Chess
    CodeForces 626D Jerry's Protest
    【POJ 1964】 City Game
  • 原文地址:https://www.cnblogs.com/zhujiabin/p/4347262.html
Copyright © 2011-2022 走看看