android 切换卡(TabWidget)

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


 
 
 


布局文件 
<?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"> 
    <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"> 
    <TextView 
    android:id="@+id/textview1" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:text="Linux" 
    android:textColor="#FF0000" 
    /> 
    <TextView 
    android:id="@+id/textview2" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:textColor="#385E0F" 
    android:text="MAC"/> 
    <TextView 
    android:id="@+id/textview3" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:textColor="#1E90FF" 
    android:text="Window"/>
</FrameLayout> 
    </LinearLayout> 
</TabHost> 
这里稍有不同,用的是 TabHost   然后 LinearLayout里边套了一个 FrameLayout 
LinearLayout 就不说了 这里说一下 FrameLayout 的特点 FrameLayout是最简单的一个布局对象。它被定制为你屏幕上的一个空白备用区域,之后你可以在其中填充一个单一对象 — 比如,一张你要发布的图片。所有的子元素将会固定在屏幕的左上角;你不能为FrameLayout中的一个子元素指定一个位置。后一个子元素将会直接在前一个子元素之上进行覆盖填充,把它们部份或全部挡住(除非后一个子元素是透明的)。这里最重要的特点就是 后一个子元素将会直接在前一个子元素之上进行覆盖填充,把它们部分或全部挡住 我们也正是利用了它的这一特点。 大家看看运行效果就知道咋回事了。这里有个关于布局对象的简单讲解http://blog.csdn.net/Android_Tutor/archive/2009/11/06/4779097.aspx 

下边是 Activity 类 
Java代码  收藏代码
  1. package xiaohang.zhimeng;  
  2.   
  3. import android.app.AlertDialog;  
  4. import android.app.Dialog;  
  5. import android.app.TabActivity;  
  6. import android.content.DialogInterface;  
  7. import android.graphics.Color;  
  8. import android.os.Bundle;  
  9. import android.widget.TabHost;   
  10. import android.widget.TabHost.OnTabChangeListener;  
  11.   
  12. //这里注意一下,继承的是TabActivity 不是Activity  
  13. public class Activity01 extends TabActivity {  
  14.   
  15.     // 声明TabHost对象  
  16.     TabHost xh_TabHost;  
  17.   
  18.     @Override  
  19.     public void onCreate(Bundle savedInstanceState) {  
  20.         super.onCreate(savedInstanceState);  
  21.         setContentView(R.layout.main);  
  22.   
  23.         // 取得TabHost对象  
  24.         xh_TabHost = getTabHost();  
  25.   
  26.         /** 
  27.          * 为TabHost添加标签 新建一个newTabSped(newTabSpec) 设置其标签和图标(setIndicator) 
  28.          * 设置内容(setContent) 
  29.          */  
  30.         // TabSpec 是TabHost的内部类 TabHost对象的 newTabSpec()方法返回一个TabSpec对象 这个关系要搞清楚  
  31.         /* 
  32.          * 源码里边是这么写的 public TabSpec newTabSpec(String tag) { return new 
  33.          * TabSpec(tag); } 
  34.          */  
  35.   
  36.         xh_TabHost.addTab(xh_TabHost.newTabSpec("tab_test1")  
  37.         // setIndicator()此方法用来设置标签和图表  
  38.                 .setIndicator("TAB 1",  
  39.                         getResources().getDrawable(R.drawable.img1))  
  40.                 // 指定内容为一个TextView --->public TabHost.TabSpec setContent (int  
  41.                 // viewId) 此方法需要一个 viewId 作为参数  
  42.                 .setContent(R.id.textview1));  
  43.   
  44.         xh_TabHost.addTab(xh_TabHost.newTabSpec("tab_test2").setIndicator(  
  45.                 "TAB 2", getResources().getDrawable(R.drawable.img2))  
  46.                 .setContent(R.id.textview2));  
  47.   
  48.         xh_TabHost.addTab(xh_TabHost.newTabSpec("tab_test3").setIndicator(  
  49.                 "TAB 3", getResources().getDrawable(R.drawable.img3))  
  50.                 .setContent(R.id.textview3));  
  51.   
  52.         // 设置TabHost的背景颜色  
  53.         xh_TabHost.setBackgroundColor(Color.argb(1502270150));  
  54.   
  55.         // 设置TabHost的背景图片资源  
  56.         xh_TabHost.setBackgroundResource(R.drawable.bg2);  
  57.   
  58.         // 设置当前显示哪一个标签 我的理解就是当你第一次启动程序默认显示那个标签 这里是指定的选项卡的ID从0开始  
  59.         xh_TabHost.setCurrentTab(0);  
  60.   
  61.         // 标签切换事件处理,setOnTabChangedListener 注意是标签切换事件不是点击事件  
  62.         // 就是从一个标签切换到另外一个标签会触发的事件  
  63.         xh_TabHost.setOnTabChangedListener(new OnTabChangeListener() {  
  64.             @Override  
  65.             public void onTabChanged(String tabId) {  
  66.                 // 定义一个弹出式的对话框  
  67.                 Dialog dialog = new AlertDialog.Builder(Activity01.this)  
  68.                         .setTitle("提示").setMessage("当前选中了:" + tabId + "标签")  
  69.                         .setPositiveButton("确定",  
  70.                                 new DialogInterface.OnClickListener() {  
  71.                                     @Override  
  72.                                     public void onClick(DialogInterface dialog,  
  73.                                             int which) {  
  74.                                         // 取消对话框  
  75.                                         dialog.cancel();  
  76.                                     }  
  77.   
  78.                                 }).create();// 创建出一个“确定”按钮  
  79.                 // 启动此对话框并且显示在屏幕上  
  80.                 dialog.show();  
  81.             }  
  82.         });  
  83.     }  
  84. }  

  85. 测试代码:点击打开链接
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章