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

Android TabActivity实现多页显示效果

阅读更多

TabActivity实现多页显示效果

作者 Legend

QQ 158067568

由于手机屏幕有限,所以我们要尽量充分利用屏幕资源。在我们的应用程序中通常有多个Activity,而且会经常切换显示,这样我们就可以用TabActivity来显示。其效果如图1所示。

 

1 tabActivity显示效果

本文就来研究TabActivity。根据帮助文档的解释,该控件用于包含并且运行多可内嵌的Activity或者View。首先讲解TabActivity的使用。

TabActivity的使用

如图1所示,远程音乐列表和本地音乐列表为两个不同的按钮,在TabActivity中他是一个TabWidget而下面的两个列表都是在各自的Activity中设置,然后在将每一个Activity添加到TabActivityFrameLayout中。也就是说在TabActivity的布局文件中必须包含TabWidgetFrameLayout两种控件。

这里值得一提的是,必须为TabActivity的布局文件的根节点设置为:TabHost。可以参考main.xml代码

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

         <LinearLayout android:orientation="vertical"

                   android:layout_width="fill_parent" android:layout_height="fill_parent"

                   android:padding="5dp">

                   <TabWidget android:id="@android:id/tabs"

                            android:layout_width="fill_parent" android:layout_height="wrap_content" />

                   <FrameLayout android:id="@android:id/tabcontent"

                            android:layout_width="fill_parent" android:layout_height="fill_parent"

                            android:padding="5dp" />

         </LinearLayout>

</TabHost> 

 

 

 

这里要说明一下,TabWidget为图一中的按钮控件,FrameLayout为要显示的内容。内容可以是如下两种方式来填充:

q      使用一个Activity中的两个不同的View

q      使用完全不相关的两个Activity

在图1中,我使用的是后者,两个完全不同的Activity。下面就来一起编写一个TabActivity的例子。

1.首先创建TabActivityDemo项目。

2.然后依次创建ArtistsActivity, AlbumsActivity, SongsActivity。然后为每一例子添加一个TextView用于区分不同的Activity,如下面代码所示:

public class ArtistsActivity extends Activity {

    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

 

        TextView textview = new TextView(this);

        textview.setText("This is the Artists tab");

        setContentView(textview);

    }

}

 

 

 

 

3.我们有了不同的显示内容,就要为每一个按钮设置不同的图标。每一组都需要两张图片用于区分是否是被选中状态。通常的设计原则是使用灰色的图片作为选中图片,白色的作为未选中的图片。可以使用图2中两幅图片。

2 示例图片

将要使用的图片保存到res/drawable目录中,然后创建一个名为ic_tab_artists.xml的文件在drawable文件夹中。文件代码如下:

<?xml version="1.0" encoding="utf-8"?>

<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <!-- When selected, use grey -->

    <item android:drawable="@drawable/ic_tab_artists_grey"

          android:state_selected="true" />

    <!-- When not selected, use white-->

    <item android:drawable="@drawable/ic_tab_artists_white" />

</selector>

 

 

 

 

4.修改我们的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">

    <LinearLayout

        android:orientation="vertical"

        android:layout_width="fill_parent"

        android:layout_height="fill_parent"

        android:padding="5dp">

        <TabWidget

            android:id="@android:id/tabs"

            android:layout_width="fill_parent"

            android:layout_height="wrap_content" />

        <FrameLayout

            android:id="@android:id/tabcontent"

            android:layout_width="fill_parent"

            android:layout_height="fill_parent"

            android:padding="5dp" />

    </LinearLayout>

</TabHost>

 

 

 

 

TabHost将根据用户的选择,自动的切换FramLayoutTabWidget的显示内容。

5.接下来修改我们的主Activity,让其继承TabActivity

6.然后使用为我们的主Activity添加OnCreate()方法如下所示:

public void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    setContentView(R.layout.main);

 

    Resources res = getResources(); // Resource object to get Drawables

    TabHost tabHost = getTabHost();  // The activity TabHost

    TabHost.TabSpec spec;  // Resusable TabSpec for each tab

    Intent intent;  // Reusable Intent for each tab

 

    // Create an Intent to launch an Activity for the tab (to be reused)

    intent = new Intent().setClass(this, ArtistsActivity.class);

 

    // Initialize a TabSpec for each tab and add it to the TabHost

    spec = tabHost.newTabSpec("artists").setIndicator("Artists",

                      res.getDrawable(R.drawable.ic_tab_artists))

                  .setContent(intent);

    tabHost.addTab(spec);

 

    // Do the same for the other tabs

    intent = new Intent().setClass(this, AlbumsActivity.class);

    spec = tabHost.newTabSpec("albums").setIndicator("Albums",

                      res.getDrawable(R.drawable.ic_tab_albums))

                  .setContent(intent);

    tabHost.addTab(spec);

 

    intent = new Intent().setClass(this, SongsActivity.class);

    spec = tabHost.newTabSpec("songs").setIndicator("Songs",

                      res.getDrawable(R.drawable.ic_tab_songs))

                  .setContent(intent);

    tabHost.addTab(spec);

 

    tabHost.setCurrentTab(2);

}

 

 

 

通常我们需要先得到TabHost,可以使用方法getTabHost()得到。

TabActivity每添加一项内容,都要通过TabHost对象得到一个TabHost.TabSpec对象,该类可以定义每一个tab的内容的属性,比如tabTidget的标题或者显示图标等。通过TabHostnewTabSpec()可以得到该对象。

可以使用setIndicator(CharSequence, Drawable)方法设置图标。使用setContent(Intent)设置内容。最后一定要将使用setContent(Intent)将这个TabHost.TabSpec对象添加到TabHost中。

在最后,可以使用setCurrentTab(int)来设置默认的显示页。

值得一提的是,TabWidget总是TabActivity的孩子结点。用于与用户交互。

7.看看我们的成果吧

 

 

2
10
分享到:
评论
3 楼 hou_anne 2014-11-14  
讲解的非常详细
2 楼 a220315410 2013-06-24  
感谢楼主分享。但是个人觉得是不是可能存在笔误:
最后一定要将使用setContent(Intent)将这个TabHost.TabSpec对象添加到TabHost中。

这句话里面的setContent(Intent)应该是想说addTab()吧?
1 楼 jiangxiao 2012-12-25  
挺好用的,感谢分享!

相关推荐

    TabActivity 实现滑动翻页源码

    本篇文章将详细解析如何使用`TabActivity`实现滑动翻页并加入动画效果。 首先,`TabHost`是`TabActivity`的核心组件,它负责管理所有的选项卡和对应的活动。我们需要在布局文件中定义一个`TabHost`,然后在代码中...

    使用 TabActivity 实现滑动翻页(带动画)和标签置底

    在Android开发中,`TabActivity`是早期版本中用于实现标签栏切换的一种方式,它可以创建一个带有多个选项卡的活动,每个选项卡对应一个单独的`Activity`或`Fragment`。然而,`TabActivity`在Android API Level 13...

    使用TabActivity简单实现TabHost显示

    在早期的Android版本中,TabActivity被广泛使用来实现这一功能,但现在已被废弃,推荐使用Fragment和ViewPager来代替。然而,为了理解这个老式的方法,我们将深入探讨如何使用TabActivity简单实现TabHost显示。 ...

    Fragment + TabActivity实现标签内跳转

    TabHost是Android系统提供的一个用于实现标签页功能的组件,而Fragment则可以看作是可重用的UI组件,它们在现代Android开发中扮演着重要角色。 首先,Fragment是Android SDK中的一种组件,它允许开发者在活动中添加...

    android tabactivity+listview+边框圆角+相机调用

    总结来说,这个项目可能涉及到创建一个使用TabActivity的多页应用,每个页面包含一个ListView来展示数据。ListView的每一项可能具有圆角边框的视觉效果,而应用还提供了调用手机相机的功能。虽然TabActivity已经过时...

    android利用fragment实现TabActivityd的效果

    TabActivity曾是Android早期版本中实现标签页切换的主要方式,但随着Android API的发展,TabActivity已被废弃。现在,我们通常使用Fragment和TabHost或者PagerTabStrip等组件来实现类似的功能。本文将详细介绍如何...

    Android学习4——ListActivity,TabActivity

    在早期的Android版本中,TabActivity用于实现多标签页的应用界面。它是一个特殊的Activity,允许开发者在一个Activity中展示多个Tab,每个Tab可以包含不同的Fragment或Activity。然而,随着Android设计指南的更新,...

    android 如何在tabactivity中嵌套tab

    在Android开发中,TabActivity是早期版本用于实现标签页切换的一种方式。然而,随着Android SDK的更新,TabActivity已被废弃,现在推荐使用Fragment和ViewPager来实现类似的功能。但为了理解这个旧的用法,我们将...

    用Fragment模拟TabActivity

    在Android应用开发中,`TabActivity`曾是实现标签页切换的主要方式,但自API 17之后,它已被弃用。现在,开发者通常使用`Fragment`和`ViewPager`等组件来实现类似的功能,这既符合最新的Android设计指南,也能提供更...

    Android开发之TabActivity用法实例详解

    TabActivity实现标签页的功能,通过导航栏对各个页面进行管理。 二.XML布局文件 注意: 1.TabActivity的布局文件要求以TabHost作为XML布局文件的根。 2.通常我们采用线性布局,所以&lt;TabHost&gt; 的子元素是 。 3.对应...

    android实现自定义tab页

    在Android应用开发中,创建自定义的Tab页可以极大地提升用户体验和界面的个性化。本教程将深入探讨如何利用RadioButton实现非源生风格的Tab页,而不是依赖于原生的TabHost或ViewPager。以下是对这个主题的详细讲解:...

    Android_TabActivity.rar_Tabú_android tab_android的Fragment

    然而,随着Android SDK的发展,TabActivity已经被弃用,取而代之的是使用 Fragments 和 ViewPager 来实现更现代、更灵活的多页视图。下面我们将深入探讨如何使用Fragment和ViewPager来实现类似TabActivity的功能,...

    TabActivity自定义实现标签换页

    在Android开发中,`TabActivity`是早期版本中用于实现标签栏切换页面的一种方式。它允许用户通过点击不同的标签在多个视图之间进行切换,提供了一种直观且友好的用户界面。然而,随着Android SDK的发展,`...

    TabActivity笔记

    然而,在旧版应用中,`TabActivity`仍然是一个重要的概念,因为它提供了一种简单的方式来组织多个`Activity`或`View`并实现它们之间的切换。 `AndroidManifest.xml`文件是每个Android应用的核心配置文件,它包含了...

    TabActivity中的Tab标签详细设置

    在Android开发中,TabActivity是早期用来实现底部标签栏切换页面的一种方式,它结合了TabHost和ActivityGroup来实现多页面间的切换。然而,随着Android版本的更新,TabActivity已经逐渐被Fragment和ViewPager等组件...

    TabActivity的使用

    在Android开发中,`TabActivity`是早期API版本中用于实现多标签页切换的一种方式。本文将深入探讨`TabActivity`的使用,以及如何通过源码理解和应用它,同时也会介绍一些相关的工具来辅助开发。 `TabHost`是`...

    TabActivity之间跳转、传值

    在Android应用开发中,`TabActivity`是一种常见的用于创建多标签界面的设计模式。它允许用户在不同的标签之间切换,每个标签通常对应一个独立的功能模块。然而,随着Android SDK的更新,`TabActivity`已被废弃,...

    TabActivity使用实例

    `TabActivity`是Android 2.x版本中的一部分,它基于`ActivityGroup`,允许在一个`Activity`中嵌套多个子`Activity`,每个子`Activity`对应一个标签页。这种方式现在看来并不推荐,因为它带来了复杂的生命周期管理...

    TabActivity

    在Android开发中,`TabActivity`是一个非常经典的组件,它被用于实现底部导航栏或者顶部选项卡的效果。在早期的Android版本中,`TabActivity`是官方推荐的实现多标签切换的方式,但在后来的API更新中,它逐渐被更...

Global site tag (gtag.js) - Google Analytics