您的位置:首页 > 其它

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

2015-03-18 15:17 211 查看
做了一个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">
<!-- 注意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>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: