Android 切换卡(TabWidget)

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

Android 切换卡(TabWidget)_第1张图片 

Android 切换卡(TabWidget)_第2张图片 

Android 切换卡(TabWidget)_第3张图片 

布局文件
  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,String,layout,dialog,encoding,电话)