您的位置:首页 > 其它

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

2012-08-15 18:04 309 查看
今天明白了Tabhost嵌套和Tab里实现多个Activity的跳转原理,自己做了一个demo,先看看效果图:









源码 如下:

[java] view
plaincopy

(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);

}

}

////////////////////////////////////////////////////////////////////////////////////////

[html] view
plaincopy

<?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">

<!-- 注意FrameLayout\TabWidget标签的位置-->

<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,就写到这里,有什么问题可以一起讨论!!!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: