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.0  APILEVEL 5  源码见附件
网盘下载http://115.com/file/bhkev9nu

Android 切换卡(TabWidget)相关推荐

  1. android标签切换卡,Android切换卡TabWidget用法示例

    本文实例讲述了Android切换卡TabWidget用法.分享给大家供大家参考,具体如下: Tab选项卡类似与电话本的界面,通过多个标签切换不同的内容,要实现这个效果,首先要知道TabHost,它是一 ...

  2. h5 android 滚动条卡顿,h5页面滑动卡顿解决方法

    解决方式: 给滚动的元素加样式:-webkit-overflow-scrolling: touch; -webkit-overflow-scrolling(允许独立的滚动区域和触摸回弹) 如果值为au ...

  3. android stk 卡号切换,采用stk/utk实现手机双卡切换及其它功能的方法和装置的制作方法...

    专利名称:采用stk/utk实现手机双卡切换及其它功能的方法和装置的制作方法 技术领域: 本发明涉及手机双卡,主要是指一种采用STK/UTK技术实现手机待机双卡切换等功能的方法及其装置. 背景技术: ...

  4. 切换卡TabHost控件的使用

    在Android中,通常可以使用切换卡(选项卡)实现切换显示不同页面内容的功能.这一功能可以通过TabHost控件来实现. 下面我们就通过一个简单的实例演示如何使用TabHost控件完成切换卡功能,完 ...

  5. ViewPager -- Fragment 切换卡顿 性能优化

    当ViewPager切换到当前的Fragment时,Fragment会加载布局并显示内容,如果用户这时快速切换ViewPager,即 Fragment需要加载UI内容,而又频繁地切换Fragment, ...

  6. android 界面切换监听,Android切换页面--setContentView

    setContentView 一般切换页面,通过Intent,startActivity可以实现,但系统创建Activity是非常耗时的,如果对切换画面时间有要求,只能用setContentView在 ...

  7. Android切换到主线程

    Android切换到主线程 方法一: view.post(Runnable action) textView.post(new Runnable() { @Override public void r ...

  8. vue项目实践教程3:中间大的五选项底部切换卡制作及相关问题解决

    在移动端项目中,有不少项目会有底部切换卡的功能需求,类似于app应用,点击底部不同的切换卡,显示不同的界面,表现不同的功能. 这里,笔者展示一个采用vux-uid 五选项切换卡,同时,中间的选项卡比较 ...

  9. android 动画卡顿分析工具

    android 动画卡顿分析工具 Android应用性能优化之分析工具 上一次记录了解决过度绘制的过程,这一次,想先弄清个概念性的东西,就是如何判断顺不顺畅? 这东西其实最初我自己也觉得有点废话,用起 ...

最新文章

  1. 玩转车联网1---初识OBD和行车助手
  2. OneZero第五周第二次站立会议(2016.4.19)
  3. 1660s功耗多少w_1660显卡要多大电源?GTX1660用多大电源合适
  4. centos minimal Bind 主从服务器部署
  5. 从javaagent迁移到JVMTI:我们的经验
  6. 面试常考题---交换变量
  7. Hive关于数据库的增删改查
  8. print_w php,THINKPHP的dump打印数组函数,输出在浏览器非常友好。
  9. android studio导入android studio工程
  10. 古老的window程序设计
  11. linux+删除+grub,请问:如何删除grub引导
  12. 8051单片机的C语言程序设计
  13. vs code发布1.37,全部换新的图标,这跟java是有仇吧,.java图标无法接受
  14. 字节跳动全链路压测(Rhino)的实践
  15. 浅浅总结一下HTML吧
  16. 移动端 --- 解决苹果手机滑动卡顿的问题
  17. [树莓派] 轻松制作一个遥控小车(C++,Socket)
  18. 如何通过市场中性策略获利
  19. C语言%7.2d、%-7d、%7.2f、%0.2f的含义和区别
  20. python 是否可以一键修图_一键修图功能强大吗?想知道哪个软件比较好用?

热门文章

  1. IAR平台移植TI OSAL到STC8A8K64S4A12单片机中
  2. LiteOS的内核——RTOS基本的特性
  3. LeetCode——7. Reverse Integer
  4. SQL记录-PLSQL数组
  5. 并查集的补集 (关押罪犯)
  6. selenium通过autoit实现上传和下载
  7. C提高_day03_作业第三题
  8. Java原生API操作XML
  9. Flash翻书效果研究
  10. 10分钟搭建商品结算平台!商品、车辆识别一网打尽