文档章节

TabActivity实现多页显示效果

Airship
 Airship
发布于 2015/01/03 19:21
字数 1112
阅读 28
收藏 0

作者 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中两幅图片。

示例图片

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

Java代码

<?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文件如下所示:

Java代码 

 

<?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()方法如下所示:

Java代码 

 

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.看看我们的成果吧

 

本文转载自:http://158067568.iteye.com/blog/941338

Airship
粉丝 49
博文 1092
码字总数 22122
作品 0
南京
高级程序员
私信 提问
android tab底部标签栏

TabActivity的使用:http://yangguangfu.iteye.com/blog/679001 android的TabActivity:http://www.cnblogs.com/keyindex/articles/1815074.html Android中TabActivity使用范例 :http://blog.c......

智能小松鼠
2016/04/08
177
0
Android界面开发之切换卡TabWidget用法

TabWidget类似Android中查看电话簿的界面,通过多个标签切换显示不同的内容。要实现这一效果,首先要了解TabHost ,它是一个用来存放多个Tab标签的容器。每一个Tab都可以对应自己的布局,比如...

鉴客
2011/11/22
29.3K
5
android ViewPager

ViewPager类提供了多界面切换的新效果。新效果有如下特征: [1] 当前显示一组界面中的其中一个界面。 [2] 当用户通过左右滑动界面时,当前的屏幕显示当前界面和下一个界面的一部分。 [3]滑动...

amigos_wu
2012/06/27
3K
1
Android的 ViewPager 简单运用

说明: ViewPager用于实现多页面的切换效果,该类存在于Google的兼容包里面,所以在引用时记得在BuilldPath中加入“android-support-v4.jar” 主布局文件 main.xml <?xml version="1.0" enc...

MrLovelyCbb
2012/05/03
902
0
TabActivity的美化

今天开始一个新专题:创新源于模仿。 第一篇从TabActivity着手,一直以为Android中的TabActivity只能放在上面,只能如此丑陋,直到有一天看到“米聊”。 咋一看,软件下面的那个菜单栏,觉得...

鉴客
2011/11/27
5.9K
5

没有更多内容

加载失败,请刷新页面

加载更多

PHP计算两个经纬度地点之间的距离

/** * 求两个已知经纬度之间的距离,单位为米 * * @param lng1 $ ,lng2 经度 * @param lat1 $ ,lat2 纬度 * @return float 距离,单位米 * @author www.Alixixi.com */function get...

子枫Eric
23分钟前
14
0
Linux—day 4

ch2 需要掌握的命令 (1)cat -n 1.txt (2)more 1.txt (3)head -n 15 initial-setup-ks.cfg (4)tail -n 17 initial-setup-ks.cfg;tail -f initial-setup-ks.cfg (5)cat -n anaconda-ks.c......

呵呵暖茶
36分钟前
16
0
【Kubernetes社区之路】我的PR被抢了

2019年11月的某天,我无意间发现一个PR作者在自己的PR中抱怨自己的PR没被合入,而另一个比自己提交晚且内容几乎一样的PR则被合入了。 字里行间透露些许伤感外加无奈: 作为一名开源爱好者,我...

恋恋美食
43分钟前
21
0
阻塞队列

对于许多线程问题, 可以通过使用一个或多个队列以优雅且安全的方式将其形式化。生产者线程向队列插人元素, 消费者线程则取出它们。 使用队列, 可以安全地从一个线程向另 一个线程传递数据...

ytuan996
44分钟前
23
0
mysql docker 配置

安装   主机上的mysql服务是基于docker安装的,具体安装脚本如下: docker run --detach \--restart always \--publish 3306:3306 --name mysql \--volume /data/mysql/logs:/logs \-...

qwfys
47分钟前
18
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部