TabWidget类似于Android 中查看电话薄的界面,通过多个标签切换显示不同内容。要实现这一效果,首先要了解TabHost,它是一个用来存放多个Tab标签的容器。每一个Tab都可以对应自己的布局,比如,电话薄中的Tab布局就是一个List的线性布局了。
要使用TabHost,首先需要通过getTabHost方法来获取TabHost的对象,然后通过addTab方法来向TabHost中添加 Tab。当然每个Tab在切换时都会产生一个事件,要捕捉这个事件需要设置TabActivity的事件监听 setOnTabChangedListener。我们先来看看运行效果吧。







布局文件
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <TabHost xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:id="@android:id/tabhost"
  4. android:layout_width="fill_parent"
  5. android:layout_height="fill_parent">
  6. <LinearLayout
  7. android:orientation="vertical"
  8. android:layout_width="fill_parent"
  9. android:layout_height="fill_parent">
  10. <TabWidget
  11. android:id="@android:id/tabs"
  12. android:layout_width="fill_parent"
  13. android:layout_height="wrap_content"/>
  14. <FrameLayout
  15. android:id="@android:id/tabcontent"
  16. android:layout_width="fill_parent"
  17. android:layout_height="fill_parent">
  18. <TextView
  19. android:id="@+id/textview1"
  20. android:layout_width="fill_parent"
  21. android:layout_height="fill_parent"
  22. android:text="Linux"
  23. android:textColor="#FF0000"
  24. />
  25. <TextView
  26. android:id="@+id/textview2"
  27. android:layout_width="fill_parent"
  28. android:layout_height="fill_parent"
  29. android:textColor="#385E0F"
  30. android:text="MAC"/>
  31. <TextView
  32. android:id="@+id/textview3"
  33. android:layout_width="fill_parent"
  34. android:layout_height="fill_parent"
  35. android:textColor="#1E90FF"
  36. android:text="Window"/>
  37. </FrameLayout>
  38. </LinearLayout>
  39. </TabHost>
这里稍有不同,用的是 TabHost 然后 LinearLayout里边套了一个 FrameLayout
LinearLayout 就不说了 这里说一下 FrameLayout 的特点 FrameLayout是最简单的一个布局对象。它被定制为你屏幕上的一个空白备用区域,之后你可以在其中填充一个单一对象 — 比如,一张你要发布的图片。所有的子元素将会固定在屏幕的左上角;你不能为FrameLayout中的一个子元素指定一个位置。后一个子元素将会直接在前一个子元素之上进行覆盖填充,把它们部份或全部挡住(除非后一个子元素是透明的)。这里最重要的特点就是 后一个子元素将会直接在前一个子元素之上进行覆盖填充,把它们部分或全部挡住 我们也正是利用了它的这一特点。 大家看看运行效果就知道咋回事了。

下边是 Activity 类
Java代码
  1. package xiaohang.zhimeng;

  2. import android.app.AlertDialog;
  3. import android.app.Dialog;
  4. import android.app.TabActivity;
  5. import android.content.DialogInterface;
  6. import android.graphics.Color;
  7. import android.os.Bundle;
  8. import android.widget.TabHost;
  9. import android.widget.TabHost.OnTabChangeListener;

  10. //这里注意一下,继承的是TabActivity 不是Activity
  11. public class Activity01 extends TabActivity {

  12. // 声明TabHost对象
  13. TabHost xh_TabHost;

  14. @Override
  15. public void onCreate(Bundle savedInstanceState) {
  16. super.onCreate(savedInstanceState);
  17. setContentView(R.layout.main);

  18. // 取得TabHost对象
  19. xh_TabHost = getTabHost();

  20. /**
  21. * 为TabHost添加标签 新建一个newTabSped(newTabSpec) 设置其标签和图标(setIndicator)
  22. * 设置内容(setContent)
  23. */
  24. // TabSpec 是TabHost的内部类 TabHost对象的 newTabSpec()方法返回一个TabSpec对象 这个关系要搞清楚
  25. /*
  26. * 源码里边是这么写的 public TabSpec newTabSpec(String tag) { return new
  27. * TabSpec(tag); }
  28. */

  29. xh_TabHost.addTab(xh_TabHost.newTabSpec("tab_test1")
  30. // setIndicator()此方法用来设置标签和图表
  31. .setIndicator("TAB 1",
  32. getResources().getDrawable(R.drawable.img1))
  33. // 指定内容为一个TextView --->public TabHost.TabSpec setContent (int
  34. // viewId) 此方法需要一个 viewId 作为参数
  35. .setContent(R.id.textview1));

  36. xh_TabHost.addTab(xh_TabHost.newTabSpec("tab_test2").setIndicator(
  37. "TAB 2", getResources().getDrawable(R.drawable.img2))
  38. .setContent(R.id.textview2));

  39. xh_TabHost.addTab(xh_TabHost.newTabSpec("tab_test3").setIndicator(
  40. "TAB 3", getResources().getDrawable(R.drawable.img3))
  41. .setContent(R.id.textview3));

  42. // 设置TabHost的背景颜色
  43. xh_TabHost.setBackgroundColor(Color.argb(150, 22, 70, 150));

  44. // 设置TabHost的背景图片资源
  45. xh_TabHost.setBackgroundResource(R.drawable.bg2);

  46. // 设置当前显示哪一个标签 我的理解就是当你第一次启动程序默认显示那个标签 这里是指定的选项卡的ID从0开始
  47. xh_TabHost.setCurrentTab(0);

  48. // 标签切换事件处理,setOnTabChangedListener 注意是标签切换事件不是点击事件
  49. // 就是从一个标签切换到另外一个标签会触发的事件
  50. xh_TabHost.setOnTabChangedListener(new OnTabChangeListener() {
  51. @Override
  52. public void onTabChanged(String tabId) {
  53. // 定义一个弹出式的对话框
  54. Dialog dialog = new AlertDialog.Builder(Activity01.this)
  55. .setTitle("提示").setMessage("当前选中了:" + tabId + "标签")
  56. .setPositiveButton("确定",
  57. new DialogInterface.OnClickListener() {
  58. @Override
  59. public void onClick(DialogInterface dialog,
  60. int which) {
  61. // 取消对话框
  62. dialog.cancel();
  63. }

  64. }).create();// 创建出一个“确定”按钮
  65. // 启动此对话框并且显示在屏幕上
  66. dialog.show();
  67. }
  68. });
  69. }
  70. }

平台:android 2.0APILEVEL 5源码见附件
网盘下载http://115.com/file/bhkev9nu

更多相关文章

  1. Android动态修改APP图标
  2. android 的layout
  3. Android中Activity切换时共享视图元素的切换动画(4.x兼容方案)
  4. Android(安卓)游戏设计教程:游戏元素和工具
  5. Java集合框架——Android中的ArrayList源码分析
  6. 腾讯微博java(android) sdk 标签相关api详细介绍
  7. Android(安卓)源码详解:View的事件分发机制
  8. android解析xml文件的方式(其三)
  9. Android中xml中shape的属性助记

随机推荐

  1. 如何监控android的流量信息
  2. Android(安卓)程序适应多种多分辨率
  3. 史上最全的Android面试题集锦
  4. Android(安卓)getDimensionPixelSize, 代
  5. Android(安卓)内存管理
  6. 《Android(安卓)开发工程师面试指南》
  7. android的图形系统
  8. android应用安全——通信安全(android htt
  9. 在Android上调用OpenCV 2.4.10库函数
  10. [置顶] android 自定义控件