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

做了一个demo,先看看效果图:

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

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

源码 如下:

() 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();//设置初始选中状态为第一个tab
}
} ////////////////////////////////////////////////////////////////////////////////////// ()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);
}
});
}
}
////////////////////////////////////////////////////////////////////////////////////////// ()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);
}
}
//////////////////////////////////////////////////////////////////////////////// () 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();//设置初始时,第一个tab为选中状态 int height =;
// int width =45;
//tabWidget.getChildCount()是tab个数
for (int i =; 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));
}
}
}
///////////////////////////////////////////////////////////////////////////////// ()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=""
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="" /> </manifest>
()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="" android:layout_width="fill_parent"
android:layout_height="fill_parent" />
</LinearLayout>
</TabHost> //////////////////////////////////////////////////////// ()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> ////////////////////////////////////////////////////// ()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> ////////////////////////////////////////////////////// ()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">
<!-- 注意FrameLayout\TabWidget标签的位置--> <FrameLayout android:id="@android:id/tabcontent"
android:layout_weight="" 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>
上一篇:js引用类型数组去重-对象标记法


下一篇:scribe、chukwa、kafka、flume日志系统对比 -摘自网络