- 浏览: 326959 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
jnssvh:
楼主,还发代码吗?jnssvh@aliyun.com
SurfaceView简单例子 -
hou_anne:
讲解的非常详细
Android TabActivity实现多页显示效果 -
小鱼小鹰:
现在还能吗。。。296252344@qq.com
自定义控件(SurfaceView与view结合) -
flyar:
你好!我按照你的代码实现多点广播,但是在一台机子休眠,另一台手 ...
UDP广播与多播简单实现 -
herber2010:
图有错误~~
java实现快速排序
TabActivity实现多页显示效果
作者 :Legend
QQ : 158067568
由于手机屏幕有限,所以我们要尽量充分利用屏幕资源。在我们的应用程序中通常有多个Activity,而且会经常切换显示,这样我们就可以用TabActivity来显示。其效果如图1所示。
图1 tabActivity显示效果
本文就来研究TabActivity。根据帮助文档的解释,该控件用于包含并且运行多可内嵌的Activity或者View。首先讲解TabActivity的使用。
TabActivity的使用
如图1所示,远程音乐列表和本地音乐列表为两个不同的按钮,在TabActivity中他是一个TabWidget而下面的两个列表都是在各自的Activity中设置,然后在将每一个Activity添加到TabActivity的FrameLayout中。也就是说在TabActivity的布局文件中必须包含TabWidget和FrameLayout两种控件。
这里值得一提的是,必须为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将根据用户的选择,自动的切换FramLayout与TabWidget的显示内容。
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的标题或者显示图标等。通过TabHost的newTabSpec()可以得到该对象。
可以使用setIndicator(CharSequence, Drawable)方法设置图标。使用setContent(Intent)设置内容。最后一定要将使用setContent(Intent)将这个TabHost.TabSpec对象添加到TabHost中。
在最后,可以使用setCurrentTab(int)来设置默认的显示页。
值得一提的是,TabWidget总是TabActivity的孩子结点。用于与用户交互。
7.看看我们的成果吧
- TabActivityDemo.rar (48.8 KB)
- 下载次数: 684
评论
最后一定要将使用setContent(Intent)将这个TabHost.TabSpec对象添加到TabHost中。
这句话里面的setContent(Intent)应该是想说addTab()吧?
发表评论
-
eclipse 快捷键 for macbook (自用备份)
2011-11-06 19:31 1696产看方法被谁调用: cmd + shift + g -
android去除状态栏和下面视图之前的黑线
2011-08-30 11:13 3497<style name=" ... -
sqlite3 常用命令 for android
2011-08-16 10:59 13341)创建数据库文件: ... -
解决Window系统adb shell后中文显示乱码
2011-08-16 10:52 6069Android中使用的是UTF-8字符,而CMD默认字符集 ... -
(转)Eclipse xml formatter setting for android
2011-08-16 10:03 1691Android里使用很多xml 定义layout,我们 ... -
ListView进阶系列之一 内容顺序淡淡显示
2011-03-04 10:06 5900ListView进阶系列之一 内容顺序淡淡显示 listVi ... -
Android Animation 高手必读 之一 Tweened Animations 代码实现
2011-02-27 23:55 9296半小时搞定Android Animation 之一 作者:L ... -
android布局文件中的include
2011-02-27 00:46 8961居然没有发现,在xml文件中可以使用include,我晕 一 ... -
【收集】Android 面试题
2011-02-25 23:42 9811这个是我自己整理的一些面试题,都是在网上找的,非原创。面试前可 ... -
handler异步控制Runnable
2011-02-20 11:03 91641 关于改变Activity中TextView的方法 ... -
Android消息机制入门一
2011-02-19 19:54 2063Android消息机制入门 ... -
自定义控件(SurfaceView与view结合)
2011-02-14 15:59 16105自定义控件(SurfaceView与view结合) 作 ... -
SurfaceView简单例子
2011-02-13 23:53 8311SurfaceView简单例子 作者:Legend ... -
SurfaceView概述
2011-02-13 21:20 16354SurfaceView概述 作者 ... -
Surface概述
2011-02-13 16:18 3233Surface概述 作者:L ... -
Activity之间的相互调用与传递参数
2011-01-05 19:08 11957Activity之间的相互调用与传递参数 作 ... -
SharedPreferenced
2010-12-25 21:49 1948SharedPreferenced ... -
Android中进行单元测试
2010-12-23 13:35 1613Android中进行单元测试 作者:LEGEND ... -
Android 与 MVC
2010-12-23 12:30 3723Android & MVC 作者:LEGEND ... -
android中文件IO
2010-12-23 01:31 3221Android中文件的读写 ...
相关推荐
TabActivity实现标签页的功能,通过导航栏对各个页面进行管理。 二.XML布局文件 注意: 1.TabActivity的布局文件要求以TabHost作为XML布局文件的根。 2.通常我们采用线性布局,所以<TabHost> 的子元素是 。 3.对应...
运用多页面视图中碎片Fragment 来实现安卓的Tab滑屏
说明Google已经建议不要使用tabActivity了,然后又发现在新建的android项目中多出了一个android dependencies包里面放着一个android-support-v4.jar包,相信大家有的已经使用过这个jar包了,这个jar里面就是一个支持...
TabHost组件可以在界面中存放多个选项卡, 很多软件都使用了改组件进行设计。 一、基础知识 TabWidget : 该组件就是TabHost标签页中上部 或者 下部的按钮, 可以点击按钮切换选项卡; TabSpec : 代表了选项卡界面, 添加...
本文实例讲述了Android选项卡功能的实现方法。分享给大家供大家参考,具体如下: 选项卡(TabHost)方便的在窗口上设置多个标签页,每个标签页相当于获得一个与外部容器相同大小的组件摆放区域 通过这种方式,可以在...
Android 实现tab视图有2种方法,一种是在布局页面中定义标签,另一种就是继承tabactivity.但是我比较喜欢第二种方式,应为如果页面比较复杂的话你的XML文件会写得比较庞大,用第二种方式XML页面相对要简洁得多。 下面...
我就废话不多说了,大家还是直接看代码吧~ // 要extends TabActivity public class Main_activity extends TabActivity { private TabHost tabHost;// 建立Tabhost控件 protected void onCreate(Bundle ...
//设置加载错误页显示 progress.showError(getResources().getDrawable(R.mipmap.monkey_cry), Constant.ERROR_TITLE, Constant.ERROR_CONTEXT, Constant.ERROR_BUTTON, new View.OnClickListener() { @Override ...
一个非常常用的高级组件demo,包括:下拉刷新与加载更多的ListView、ORMLite、Cronton、由fragment替换TabActivity的Tabbar、actionbarSherlock、httpClient、SlidingMenu、以及滑动页面效果的PageIndicate等!...