概述
今天明白了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>
//
- <?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>
OK,就写到这里,有什么问题可以一起讨论!!!
最后
以上就是火星上爆米花为你收集整理的Tabhost嵌套以及Tab中多个Activity跳转的实现的全部内容,希望文章能够帮你解决Tabhost嵌套以及Tab中多个Activity跳转的实现所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复