Tab与TabHost
这就是Tab,而盛放Tab的容器就是TabHost
如何实现??
每一个Tab还对应了一个布局,这个就有点好玩了。一个Activity,对应了多个功能布局。
①新建一个Tab项目,注意,不要生成main Activity
这里不要选
②在包里面新建一个类MyTab,继承于TabActivity
其实,TabActivity是Activity的子类
package zyf.tab.test;
import android.app.TabActivity;
public class MyTab extends TabActivity {
}
复制代码
③从父类继承OnCreate()入口方法
package zyf.tab.test;
import android.app.TabActivity;
import android.os.Bundle;
public class MyTab extends TabActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
}
}
复制代码
④在Manifest.xml文件中注册一下MyTab类(Activity)
<activity android:name=".MyTab">
<intent-filter>
<action android:name="android.intent.action.MAIN"></action>
<category android:name="android.intent.category.LAUNCHER"></category>
</intent-filter>
</activity>
复制代码
⑤这时候,需要设计一下标签页对应的布局,一般采用FrameLayout作为根布局,每个标签页面对应一个子节点的Layout
<?xml version="1.0" encoding="utf-8"?>
<!-- 这里是根节点布局 -- >
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent" android:layout_height="fill_parent">
<!-- 第一个Tab 对应的布局 -- >
<LinearLayout android:id="@+id/widget_layout_Blue"
android:layout_width="fill_parent" android:layout_height="fill_parent"
androidrientation="vertical" >
<EditText android:id="@+id/widget34" android:layout_width="fill_parent"
android:layout_height="wrap_content" android:text="EditText"
android:textSize="18sp">
</EditText>
<Button android:id="@+id/widget30" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:text="Button">
</Button>
</LinearLayout>
<!-- 第二个Tab 对应的布局 -- >
<LinearLayout android:id="@+id/widget_layout_red"
android:layout_width="fill_parent" android:layout_height="fill_parent"
androidrientation="vertical" >
<AnalogClock android:id="@+id/widget36"
android:layout_width="wrap_content" android:layout_height="wrap_content">
</AnalogClock>
</LinearLayout>
<!-- 第三个Tab 对应的布局 -- >
<LinearLayout android:id="@+id/widget_layout_green"
android:layout_width="fill_parent" android:layout_height="fill_parent"
androidrientation="vertical">
<RadioGroup android:id="@+id/widget43"
android:layout_width="166px" android:layout_height="98px"
androidrientation="vertical">
<RadioButton android:id="@+id/widget44"
android:layout_width="wrap_content" android:layout_height="wrap_content"
android:text="RadioButton">
</RadioButton>
<RadioButton android:id="@+id/widget45"
android:layout_width="wrap_content" android:layout_height="wrap_content"
android:text="RadioButton">
</RadioButton>
</RadioGroup>
</LinearLayout>
</FrameLayout>
复制代码
⑥首先,应该声明TabHost,然后用LayoutInflater过滤出布局来,给TabHost加上含有Tab页面的FrameLayout
private TabHost myTabhost;
myTabhost=this.getTabHost();//从TabActivity上面获取放置Tab的TabHost
LayoutInflater.from(this).inflate(R.layout.main, myTabhost.getTabContentView(), true);
//from(this)从这个TabActivity获取LayoutInflater
//R.layout.main 存放Tab布局
//通过TabHost获得存放Tab标签页内容的FrameLayout
//是否将inflate 拴系到根布局元素上
myTabhost.setBackgroundColor(Color.argb(150, 22, 70, 150));
//设置一下TabHost的颜色
复制代码
⑦接着,在TabHost创建一个标签,然后设置一下标题/图标/标签页布局
myTabhost
.addTab(myTabhost.newTabSpec("TT")// 制造一个新的标签TT
.setIndicator("KK",
getResources().getDrawable(R.drawable.ajjc))
// 设置一下显示的标题为KK,设置一下标签图标为ajjc
.setContent(R.id.widget_layout_red));
//设置一下该标签页的布局内容为R.id.widget_layout_red,这是FrameLayout中的一个子Layout
复制代码
⑧标签切换事件处理,setOnTabChangedListener
myTabhost.setOnTabChangedListener(new OnTabChangeListener(){
@Override
public void onTabChanged(String tabId) {
// TODO Auto-generated method stub
}
});
复制代码
⑨各个标签页的动态MENU
先把在XML中设计好的MENU放到一个int数组里
private static final int myMenuResources[] = { R.menu.phonebook_menu,
R.menu.addphone_menu, R.menu.chatting_menu, R.menu.userapp_menu };
复制代码
在setOnTabChangedListener()方法中根据标签的切换情况来设置myMenuSettingTag
@Override
public void onTabChanged(String tagString) {
// TODO Auto-generated method stub
if (tagString.equals("One")) {
myMenuSettingTag = 1;
}
if (tagString.equals("Two")) {
myMenuSettingTag = 2;
}
if (tagString.equals("Three")) {
myMenuSettingTag = 3;
}
if (tagString.equals("Four")) {
myMenuSettingTag = 4;
}
if (myMenu != null) {
onCreateOptionsMenu(myMenu);
}
}
复制代码
然后onCreateOptionsMenu(Menu menu) 方法中通过MenuInflater过滤器动态加入MENU
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// TODO Auto-generated method stub
// Hold on to this
myMenu = menu;
myMenu.clear();//清空MENU菜单
// Inflate the currently selected menu XML resource.
MenuInflater inflater = getMenuInflater();
//从TabActivity这里获取一个MENU过滤器
switch (myMenuSettingTag) {
case 1:
inflater.inflate(myMenuResources[0], menu);
//动态加入数组中对应的XML MENU菜单
break;
case 2:
inflater.inflate(myMenuResources[1], menu);
break;
case 3:
inflater.inflate(myMenuResources[2], menu);
break;
case 4:
inflater.inflate(myMenuResources[3], menu);
break;
default:
break;
}
return super.onCreateOptionsMenu(menu);
}
复制代码
menu 布局
<?xml version="1.0" encoding="utf-8"?>
<menu
xmlns:android="http://schemas.android.com/apk/res/android">
<group android:id="@+id/group_a"><item android:id="@+id/item_a" android:icon="@drawable/gimp" android:title="Gimp"></item>
</group>
</menu>
⑩运行效果
这就是Tab,而盛放Tab的容器就是TabHost
如何实现??
每一个Tab还对应了一个布局,这个就有点好玩了。一个Activity,对应了多个功能布局。
①新建一个Tab项目,注意,不要生成main Activity
这里不要选
②在包里面新建一个类MyTab,继承于TabActivity
其实,TabActivity是Activity的子类
package zyf.tab.test;
import android.app.TabActivity;
public class MyTab extends TabActivity {
}
复制代码
③从父类继承OnCreate()入口方法
package zyf.tab.test;
import android.app.TabActivity;
import android.os.Bundle;
public class MyTab extends TabActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
}
}
复制代码
④在Manifest.xml文件中注册一下MyTab类(Activity)
<activity android:name=".MyTab">
<intent-filter>
<action android:name="android.intent.action.MAIN"></action>
<category android:name="android.intent.category.LAUNCHER"></category>
</intent-filter>
</activity>
复制代码
⑤这时候,需要设计一下标签页对应的布局,一般采用FrameLayout作为根布局,每个标签页面对应一个子节点的Layout
<?xml version="1.0" encoding="utf-8"?>
<!-- 这里是根节点布局 -- >
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent" android:layout_height="fill_parent">
<!-- 第一个Tab 对应的布局 -- >
<LinearLayout android:id="@+id/widget_layout_Blue"
android:layout_width="fill_parent" android:layout_height="fill_parent"
androidrientation="vertical" >
<EditText android:id="@+id/widget34" android:layout_width="fill_parent"
android:layout_height="wrap_content" android:text="EditText"
android:textSize="18sp">
</EditText>
<Button android:id="@+id/widget30" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:text="Button">
</Button>
</LinearLayout>
<!-- 第二个Tab 对应的布局 -- >
<LinearLayout android:id="@+id/widget_layout_red"
android:layout_width="fill_parent" android:layout_height="fill_parent"
androidrientation="vertical" >
<AnalogClock android:id="@+id/widget36"
android:layout_width="wrap_content" android:layout_height="wrap_content">
</AnalogClock>
</LinearLayout>
<!-- 第三个Tab 对应的布局 -- >
<LinearLayout android:id="@+id/widget_layout_green"
android:layout_width="fill_parent" android:layout_height="fill_parent"
androidrientation="vertical">
<RadioGroup android:id="@+id/widget43"
android:layout_width="166px" android:layout_height="98px"
androidrientation="vertical">
<RadioButton android:id="@+id/widget44"
android:layout_width="wrap_content" android:layout_height="wrap_content"
android:text="RadioButton">
</RadioButton>
<RadioButton android:id="@+id/widget45"
android:layout_width="wrap_content" android:layout_height="wrap_content"
android:text="RadioButton">
</RadioButton>
</RadioGroup>
</LinearLayout>
</FrameLayout>
复制代码
⑥首先,应该声明TabHost,然后用LayoutInflater过滤出布局来,给TabHost加上含有Tab页面的FrameLayout
private TabHost myTabhost;
myTabhost=this.getTabHost();//从TabActivity上面获取放置Tab的TabHost
LayoutInflater.from(this).inflate(R.layout.main, myTabhost.getTabContentView(), true);
//from(this)从这个TabActivity获取LayoutInflater
//R.layout.main 存放Tab布局
//通过TabHost获得存放Tab标签页内容的FrameLayout
//是否将inflate 拴系到根布局元素上
myTabhost.setBackgroundColor(Color.argb(150, 22, 70, 150));
//设置一下TabHost的颜色
复制代码
⑦接着,在TabHost创建一个标签,然后设置一下标题/图标/标签页布局
myTabhost
.addTab(myTabhost.newTabSpec("TT")// 制造一个新的标签TT
.setIndicator("KK",
getResources().getDrawable(R.drawable.ajjc))
// 设置一下显示的标题为KK,设置一下标签图标为ajjc
.setContent(R.id.widget_layout_red));
//设置一下该标签页的布局内容为R.id.widget_layout_red,这是FrameLayout中的一个子Layout
复制代码
⑧标签切换事件处理,setOnTabChangedListener
myTabhost.setOnTabChangedListener(new OnTabChangeListener(){
@Override
public void onTabChanged(String tabId) {
// TODO Auto-generated method stub
}
});
复制代码
⑨各个标签页的动态MENU
先把在XML中设计好的MENU放到一个int数组里
private static final int myMenuResources[] = { R.menu.phonebook_menu,
R.menu.addphone_menu, R.menu.chatting_menu, R.menu.userapp_menu };
复制代码
在setOnTabChangedListener()方法中根据标签的切换情况来设置myMenuSettingTag
@Override
public void onTabChanged(String tagString) {
// TODO Auto-generated method stub
if (tagString.equals("One")) {
myMenuSettingTag = 1;
}
if (tagString.equals("Two")) {
myMenuSettingTag = 2;
}
if (tagString.equals("Three")) {
myMenuSettingTag = 3;
}
if (tagString.equals("Four")) {
myMenuSettingTag = 4;
}
if (myMenu != null) {
onCreateOptionsMenu(myMenu);
}
}
复制代码
然后onCreateOptionsMenu(Menu menu) 方法中通过MenuInflater过滤器动态加入MENU
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// TODO Auto-generated method stub
// Hold on to this
myMenu = menu;
myMenu.clear();//清空MENU菜单
// Inflate the currently selected menu XML resource.
MenuInflater inflater = getMenuInflater();
//从TabActivity这里获取一个MENU过滤器
switch (myMenuSettingTag) {
case 1:
inflater.inflate(myMenuResources[0], menu);
//动态加入数组中对应的XML MENU菜单
break;
case 2:
inflater.inflate(myMenuResources[1], menu);
break;
case 3:
inflater.inflate(myMenuResources[2], menu);
break;
case 4:
inflater.inflate(myMenuResources[3], menu);
break;
default:
break;
}
return super.onCreateOptionsMenu(menu);
}
复制代码
menu 布局
<?xml version="1.0" encoding="utf-8"?>
<menu
xmlns:android="http://schemas.android.com/apk/res/android">
<group android:id="@+id/group_a"><item android:id="@+id/item_a" android:icon="@drawable/gimp" android:title="Gimp"></item>
</group>
</menu>
⑩运行效果
发表评论
-
startActivityForResult 简介
2011-03-29 15:55 1270依次打开Activity A1--A2--A3--A4 这时 ... -
startActivityForResult
2011-03-29 15:49 1129startActivityForResult 方法-- ... -
Android对话框
2011-03-25 11:21 1113Android 对话框(Dialog)大全 ... -
PreferenceActivity详解
2011-03-25 11:15 1430为了引入这个概率 首先从需求说起 即:现有某Activity专 ... -
TCP/UDP/HTTP
2011-03-25 11:09 1111先来一个讲TCP、UDP和HTTP ... -
9png
2011-03-25 11:08 1902今天学习了用9png图来优化横屏竖屏的UI,使用sdk自带的工 ... -
Notification
2011-03-25 11:07 923Android系统的状态栏(Status Bar)中有一个创新 ... -
一些技巧
2011-03-25 11:03 7651:查看是否有存储卡插入 String status=Envi ... -
布局像素单位
2011-03-25 11:03 811Android的layout文件中有时候可能会指定具体的单位, ... -
使用ActivityGroup来切换Activity和Layout
2011-03-25 11:02 1113在一个主界面中做Activity切换一般都会用TabActiv ... -
activitygroup
2011-03-25 11:01 1676说说tabhost和activitygroup 最近 ... -
线程
2011-03-25 11:01 998今天在论坛上看到一些关于线程的帖子,我觉得与我理解的有些差异, ... -
类级框架
2011-03-25 11:00 730类集框架:Collection,Map,Iterator,En ... -
Intent打电话
2011-03-25 11:00 1196intent英文意思是意图,pending表示即将发生或来临的 ... -
Intent Uri
2011-03-25 10:59 1053进入联系人页面 1.Intent intent = new I ... -
Service
2011-03-25 10:59 932一、Service的概念 Service是Android程序中 ... -
Broadcast Receiver
2011-03-25 10:56 1920一、Broadcast Receiver简介 Android中 ... -
ContentProvider MIME类型
2011-03-25 10:55 1229Android程序的主要4部分 ... -
ContentProvider-1查询
2011-03-25 10:55 1215今天看了android的官方文档中ContentProvide ... -
ContentProvider-2modify data:insert,update,delete
2011-03-25 10:54 1184今天补充关于modify data ...
相关推荐
### Android中的Tab与TabHost详解 #### 一、Tab与TabHost概述 在Android开发过程中,经常需要设计具有标签切换功能的应用界面。其中,`TabHost`是Android提供的一种实现多标签视图的方式,它可以帮助开发者创建出...
在Android开发中,Tab布局和TabHost是创建多页面、多视图应用界面的重要组件,它们可以帮助用户在不同的功能之间轻松切换。本文将详细介绍Tab和TabHost的使用方法,并通过一个实际的源码实例来加深理解。 首先,Tab...
在Android开发中,TabHost和TabWidget是两个重要的组件,它们用于实现标签栏(Tab)的布局和交互。TabHost可以看作是一个容器,它管理多个小窗口(FrameLayout),每个窗口对应一个Tab,而TabWidget则负责显示这些...
4. 子TabHost的创建和设置与主TabHost相似,只是它们的生命周期与主TabHost中的标签关联,当用户切换主TabHost的标签时,子TabHost也会相应地改变。 在"DoubleTabHost"这个示例中,我们可以看到如何实现这种嵌套...
在Android开发中,Tab与TabHost是构建多页面、多视图应用的常见方式,尤其在早期版本的Android系统中非常流行。它们提供了一种在单一界面中切换不同功能区域的用户界面设计,使得用户可以方便地在多个相关任务之间...
本文将深入探讨如何使用TabHost组件在同一Activity上实现简单的Android选项卡菜单。TabHost是Android SDK提供的一种用于构建多标签界面的容器,它允许我们在一个Activity内创建多个Tab,每个Tab对应一个单独的视图...
本文将通过实例详细讲解如何在Android应用中使用TabHost。 首先,我们要理解TabHost和TabWidget的关系。TabHost是一个容器,它包含了TabWidget和一个FrameLayout( Framelayout)。TabWidget是显示和管理各个Tab的...
本文将深入讲解如何在Android中使用TabHost,并通过一个简单实例来演示其基本用法。 首先,我们需要了解TabHost的基本结构。TabHost通常包含两个主要部分:TabWidget和FrameLayout。TabWidget负责显示和管理各个Tab...
TabHost通常与TabWidget和FrameLayout一起使用,创建一个带有可点击标签的界面,每个标签对应一个活动(Activity)或者布局。下面将详细讲解TabHost的使用方法及其相关知识点。 首先,了解TabHost的基本结构。...
本教程将深入讲解如何使用TabHost在Android应用中实现自定义的页签页面。 首先,我们需要理解TabHost的基本结构。TabHost包含两个主要部分:TabWidget和FrameLayout。TabWidget是显示页签的地方,而FrameLayout...
### Android 控件之TabHost Tab页 #### 一、TabHost 概述 TabHost 是 Android 中用于实现标签页面切换的一个重要控件。通过 TabHost 可以方便地为应用程序添加多个标签页面,并且能够轻松地进行页面间的切换。...
在Android开发中,TabHost是一个重要的组件,它用于创建具有多个Tab标签的界面,每个标签页可以关联一个单独的活动(Activity)或者视图(View)。这篇博客文章“android总结之TabHost”深入探讨了如何在Android应用...
本文将深入讲解如何在Android应用程序中有效地使用TabHost。 一、TabHost概述 TabHost是Android SDK中的一个容器类,用于管理一组TabWidget(标签)和一个FrameLayout(帧布局),在这个帧布局中,我们可以切换显示...
本篇将深入讲解如何利用TabHost来构建一个简单的Android应用实例。 首先,我们需要了解TabHost的基本结构。TabHost由两部分组成:TabWidget和FrameLayout。TabWidget负责显示各个选项卡,而FrameLayout则承载每个...
### Android开发中的Tab与TabHost深入解析 在Android开发中,`TabHost`与`Tab`是构建具有标签切换功能的界面的重要组件。通过`TabHost`,开发者可以轻松地在应用内创建多个标签,每个标签都可以显示不同的内容或...
Android tabhost 详细讲解
在Android开发中,TabHost不仅可以与单独的Activity关联,还可以与Fragment一起使用,这样可以在单个Activity中管理多个Fragment,提高应用的性能和效率。这需要使用FragmentTabHost类,它扩展了TabHost,并提供了对...
综上所述,`android Tabhost使用Demo`是一个帮助开发者学习和理解如何在Android应用中实现多Tab界面的实例。通过这个Demo,你可以了解到TabHost的基本用法,包括设置Tab、关联Activity、自定义Tab样式以及处理Tab...
8. **兼容性问题**:由于TabHost是早期Android API的一部分,所以在较低版本的Android系统上运行时,可能需要使用Support Library中的Fragment和TabHost的兼容版本。 9. **现代替代方案**:尽管TabHost仍然是可行的...