阅读更多
TabWidget类似于Android 中查看电话薄的界面,通过多个标签切换显示不同内容。要实现这一效果,首先要了解TabHost,它是一个用来存放多个Tab标签的容器。每一个Tab都可以对应自己的布局,比如,电话薄中的Tab布局就是一个List的线性布局了。
要使用TabHost,首先需要通过getTabHost方法来获取TabHost的对象,然后通过addTab方法来向TabHost中添加 Tab。当然每个Tab在切换时都会产生一个事件,要捕捉这个事件需要设置TabActivity的事件监听 setOnTabChangedListener。我们先来看看运行效果吧。
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();
}
});
}
}
- 大小: 31.2 KB
Android 标题栏(titlebar)显示进度条 | Android 控件之SeekBar
评论
1 楼 gf_crazy 2011-11-01
请问 LZ 有关闭 tab 时,会触发的事件吗?
比如返回键。