• 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>  
  • 相关阅读:
    访问 IIS 元数据库失败
    C# List<T>运用
    Unicode 数据
    讲解SQL Server 2000的Collection排序规则
    delphi Format用法
    delphi 文件的操作
    class of 语句
    深入delphi编程
    delphi 事件委托 未看
    如何让delphi在启动时不自动创建空的工程?
  • 原文地址:https://www.cnblogs.com/zhujiabin/p/4347262.html
Copyright © 2020-2023  润新知