Android 控件之切换卡(TabWidget) – 丸子 – ITeye技术网站

Android 控件之切换卡(TabWidget)

AndroidITeyeQQOSXML 

阅读更多

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

image

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">
                <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>

IaiaiActivity.java类:

package com.iaiai.activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.app.TabActivity;
import android.content.DialogInterface;
import android.graphics.Color;
import android.os.Bundle;
import android.widget.TabHost;
import android.widget.TabHost.OnTabChangeListener;
/**
 * 
 * <p>
 * Title: IaiaiActivity.java
 * </p>
 * <p>
 * E-Mail: [email protected]
 * </p>
 * <p>
 * QQ: 176291935
 * </p>
 * <p>
 * Http: iaiai.iteye.com
 * </p>
 * <p>
 * Create time: 2011-6-26
 * </p>
 * 
 * @author 丸子
 * @version 0.0.1
 */
public class IaiaiActivity extends TabActivity {
        @Override
        public void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.main);
                // 取得TabHost对象
                TabHost xh_TabHost = getTabHost();
                /**
                 * 为TabHost添加标签 新建一个newTabSped(newTabSpec) 设置其标签和图标(setIndicator)
                 * 设置内容(setContent)
                 */
                // TabSpec 是TabHost的内部类 TabHost对象的 newTabSpec()方法返回一个TabSpec对象 这个关系要搞清楚
                /*
                 * 源码里边是这么写的 public TabSpec newTabSpec(String tag) { return new
                 * TabSpec(tag); }
                 */
                xh_TabHost.addTab(xh_TabHost
                                .newTabSpec("tab_test1")
                                // setIndicator()此方法用来设置标签和图表
                                .setIndicator("TAB 1",
                                                getResources().getDrawable(R.drawable.img1))
                                // 指定内容为一个TextView --->public TabHost.TabSpec setContent (int
                                // viewId) 此方法需要一个 viewId 作为参数
                                .setContent(R.id.textview1));
                xh_TabHost.addTab(xh_TabHost
                                .newTabSpec("tab_test2")
                                .setIndicator("TAB 2",
                                                getResources().getDrawable(R.drawable.img2))
                                .setContent(R.id.textview2));
                xh_TabHost.addTab(xh_TabHost
                                .newTabSpec("tab_test3")
                                .setIndicator("TAB 3",
                                                getResources().getDrawable(R.drawable.img3))
                                .setContent(R.id.textview3));
                // 设置TabHost的背景颜色
                xh_TabHost.setBackgroundColor(Color.argb(150, 22, 70, 150));
                // 设置TabHost的背景图片资源
                xh_TabHost.setBackgroundResource(R.drawable.bg2);
                // 设置当前显示哪一个标签 我的理解就是当你第一次启动程序默认显示那个标签 这里是指定的选项卡的ID从0开始
                xh_TabHost.setCurrentTab(0);
                // 标签切换事件处理,setOnTabChangedListener 注意是标签切换事件不是点击事件
                // 就是从一个标签切换到另外一个标签会触发的事件
                xh_TabHost.setOnTabChangedListener(new OnTabChangeListener() {
                        @Override
                        public void onTabChanged(String tabId) {
                                // 定义一个弹出式的对话框
                                Dialog dialog = new AlertDialog.Builder(IaiaiActivity.this)
                                                .setTitle("提示")
                                                .setMessage("当前选中了:" + tabId + "标签")
                                                .setPositiveButton("确定",
                                                                new DialogInterface.OnClickListener() {
                                                                        @Override
                                                                        public void onClick(DialogInterface dialog,
                                                                                        int which) {
                                                                                // 取消对话框
                                                                                dialog.cancel();
                                                                        }
                                                                }).create();// 创建出一个“确定”按钮
                                // 启动此对话框并且显示在屏幕上
                                dialog.show();
                        }
                });
        }
}
  • image
  • 大小: 31.2 KB

| Android 控件之SeekBar

评论

1 楼 gf_crazy 2011-11-01  

请问 LZ 有关闭 tab 时,会触发的事件吗?
比如返回键。

版权声明:
作者:admin
链接:https://www.techfm.club/p/30810.html
来源:TechFM
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
< <上一篇
下一篇>>