Android TabWidget切换卡的实现应用
tabwidget类似于android 中查看电话薄的界面,通过多个标签切换显示不同内容。要实现这一效果,首先要了解tabhost,它是一个用来存放多个tab标签的容器。每一个tab都可以对应自己的布局,比如,电话薄中的tab布局就是一个list的线性布局了。
要使用tabhost,首先需要通过gettabhost方法来获取tabhost的对象,然后通过addtab方法来向tabhost中添加 tab。当然每个tab在切换时都会产生一个事件,要捕捉这个事件需要设置tabactivity的事件监听 setontabchangedlistener。
1、布局文件
<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:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<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:text="mac"
android:textcolor="#385e0f" />
<textview
android:id="@+id/textview3"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:text="windows"
android:textcolor="#1e90ff" />
</framelayout>
</linearlayout>
</tabhost>
2、修改mainactivity,注意是继承自tabactivity
public class mainactivity extends tabactivity { private tabhost tabhost; @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); tabhost = gettabhost(); addtab();// 添加标签 // 设置tabhost背景颜色 tabhost.setbackgroundcolor(color.argb(150, 20, 80, 150)); // 设置tabhost背景图片资源 tabhost.setbackgroundresource(r.drawable.ic_launcher); // 设置当前显示哪一个标签 我的理解就是当你第一次启动程序默认显示那个标签 这里是指定的选项卡的id从0开始 tabhost.setcurrenttab(0); // 标签切换事件处理,setontabchangedlistener 注意是标签切换事件不是点击事件,而是从一个标签切换到另外一个标签会触发的事件 tabhost.setontabchangedlistener(new ontabchangelistener() { @override public void ontabchanged(string tabid) { alertdialog.builder builder = new alertdialog.builder(mainactivity.this); dialog dia; builder.settitle("提示"); builder.setmessage("当前选中了" + tabid + "标签"); builder.setpositivebutton("确定", new onclicklistener() { @override public void onclick(dialoginterface dialog, int which) { dialog.cancel(); } }); dia = builder.create(); dia.show(); } }); } // 为tabhost添加标签 新建一个newtabsped(new tabspec) 设置其标签和图标(setindicator)、设置内容(setcontent) // tabspec是tabhost的内部类 tabhost对象的 newtabspec()方法返回一个tabspec对象 // 源码里边是这么写的 public tabspec newtabspec(string tag) // { return new tabspec(tag); } private void addtab() { tabhost.addtab(tabhost .newtabspec("tab1") .setindicator("tab1", getresources().getdrawable(r.drawable.ic_launcher))// setindicator()此方法用来设置标签和图表 .setcontent(r.id.textview1)); // 指定内容为一个textview --->public tabhost.tabspec setcontent(int viewid) 此方法需要一个 viewid 作为参数 tabhost.addtab(tabhost .newtabspec("tab2") .setindicator("tab2", getresources().getdrawable(r.drawable.ic_launcher)) .setcontent(r.id.textview2)); tabhost.addtab(tabhost .newtabspec("tab3") .setindicator("tab3", getresources().getdrawable(r.drawable.ic_launcher)) .setcontent(r.id.textview3)); } }
3、运行程序:如下!