`
trygood
  • 浏览: 78048 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

史上最全的Android的Tab与TabHost讲解

阅读更多
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>

⑩运行效果






  • 大小: 19.2 KB
  • 大小: 5.4 KB
  • 大小: 30.3 KB
  • 大小: 32.3 KB
  • 大小: 35.2 KB
分享到:
评论

相关推荐

    史上最全的Android的Tab与TabHost.txt

    ### Android中的Tab与TabHost详解 #### 一、Tab与TabHost概述 在Android开发过程中,经常需要设计具有标签切换功能的应用界面。其中,`TabHost`是Android提供的一种实现多标签视图的方式,它可以帮助开发者创建出...

    android控件之tab,tabhost用法实例源码

    在Android开发中,Tab布局和TabHost是创建多页面、多视图应用界面的重要组件,它们可以帮助用户在不同的功能之间轻松切换。本文将详细介绍Tab和TabHost的使用方法,并通过一个实际的源码实例来加深理解。 首先,Tab...

    Tab-TabHost.zip_Tabú_tabhost

    在Android开发中,TabHost和TabWidget是两个重要的组件,它们用于实现标签栏(Tab)的布局和交互。TabHost可以看作是一个容器,它管理多个小窗口(FrameLayout),每个窗口对应一个Tab,而TabWidget则负责显示这些...

    Android 嵌套TabHost示例

    4. 子TabHost的创建和设置与主TabHost相似,只是它们的生命周期与主TabHost中的标签关联,当用户切换主TabHost的标签时,子TabHost也会相应地改变。 在"DoubleTabHost"这个示例中,我们可以看到如何实现这种嵌套...

    Tab与TabHost

    在Android开发中,Tab与TabHost是构建多页面、多视图应用的常见方式,尤其在早期版本的Android系统中非常流行。它们提供了一种在单一界面中切换不同功能区域的用户界面设计,使得用户可以方便地在多个相关任务之间...

    简单的android选项卡Tab菜单TabHost(一)同一Activity上实现

    本文将深入探讨如何使用TabHost组件在同一Activity上实现简单的Android选项卡菜单。TabHost是Android SDK提供的一种用于构建多标签界面的容器,它允许我们在一个Activity内创建多个Tab,每个Tab对应一个单独的视图...

    实例讲解Android应用开发中TabHost的使用要点

    本文将通过实例详细讲解如何在Android应用中使用TabHost。 首先,我们要理解TabHost和TabWidget的关系。TabHost是一个容器,它包含了TabWidget和一个FrameLayout( Framelayout)。TabWidget是显示和管理各个Tab的...

    android TabHost(标签)的使用

    本文将深入讲解如何在Android中使用TabHost,并通过一个简单实例来演示其基本用法。 首先,我们需要了解TabHost的基本结构。TabHost通常包含两个主要部分:TabWidget和FrameLayout。TabWidget负责显示和管理各个Tab...

    Android TabHost控件讲解

    TabHost通常与TabWidget和FrameLayout一起使用,创建一个带有可点击标签的界面,每个标签对应一个活动(Activity)或者布局。下面将详细讲解TabHost的使用方法及其相关知识点。 首先,了解TabHost的基本结构。...

    Android-TabHost.rar_android_android tabhost_tabhost_tabhost andr

    本教程将深入讲解如何使用TabHost在Android应用中实现自定义的页签页面。 首先,我们需要理解TabHost的基本结构。TabHost包含两个主要部分:TabWidget和FrameLayout。TabWidget是显示页签的地方,而FrameLayout...

    Android 控件之TabHost Tab页

    ### Android 控件之TabHost Tab页 #### 一、TabHost 概述 TabHost 是 Android 中用于实现标签页面切换的一个重要控件。通过 TabHost 可以方便地为应用程序添加多个标签页面,并且能够轻松地进行页面间的切换。...

    android总结之TabHost

    在Android开发中,TabHost是一个重要的组件,它用于创建具有多个Tab标签的界面,每个标签页可以关联一个单独的活动(Activity)或者视图(View)。这篇博客文章“android总结之TabHost”深入探讨了如何在Android应用...

    andorid中TabHost的使用

    本文将深入讲解如何在Android应用程序中有效地使用TabHost。 一、TabHost概述 TabHost是Android SDK中的一个容器类,用于管理一组TabWidget(标签)和一个FrameLayout(帧布局),在这个帧布局中,我们可以切换显示...

    android 一个TabHost的例子

    本篇将深入讲解如何利用TabHost来构建一个简单的Android应用实例。 首先,我们需要了解TabHost的基本结构。TabHost由两部分组成:TabWidget和FrameLayout。TabWidget负责显示各个选项卡,而FrameLayout则承载每个...

    andriod 开发笔记 Tab与TabHost

    ### Android开发中的Tab与TabHost深入解析 在Android开发中,`TabHost`与`Tab`是构建具有标签切换功能的界面的重要组件。通过`TabHost`,开发者可以轻松地在应用内创建多个标签,每个标签都可以显示不同的内容或...

    Android tabhost 详细讲解

    Android tabhost 详细讲解

    android TabHost全用法

    在Android开发中,TabHost不仅可以与单独的Activity关联,还可以与Fragment一起使用,这样可以在单个Activity中管理多个Fragment,提高应用的性能和效率。这需要使用FragmentTabHost类,它扩展了TabHost,并提供了对...

    android Tabhost使用Demo

    综上所述,`android Tabhost使用Demo`是一个帮助开发者学习和理解如何在Android应用中实现多Tab界面的实例。通过这个Demo,你可以了解到TabHost的基本用法,包括设置Tab、关联Activity、自定义Tab样式以及处理Tab...

    Android fragment 内部嵌套tabhost组件

    8. **兼容性问题**:由于TabHost是早期Android API的一部分,所以在较低版本的Android系统上运行时,可能需要使用Support Library中的Fragment和TabHost的兼容版本。 9. **现代替代方案**:尽管TabHost仍然是可行的...

Global site tag (gtag.js) - Google Analytics