学徒浅析Android开发:第八讲——TabWidget标签制作

时间:2022-11-02 09:43:35

          今天小编向大家介绍一下在Android中如何制作标签效果。

         TabWighet类似于Android系统中查看电话薄的界面,通过多个标签切换显示不同的内容。要实现这一效果,我们必须先从TabHost入手。TabHost用来存放duogeTab标签,而每一个Tab标签都可以有自己的布局。即相当于TabHost只是一个存放不同布局的列表罢了。

       我们在xml文件中设置TabWidget时,必须以FrameLayout作为它 的根部局,然后必须通过TabHost来管理Tab,这些事android规定的,我们无法改变,下面就一起看下代码吧,详细注释已经写在代码中了。

package com.example.demo_tabwidget;
/**
* @author Arthur Lee
* @time 07/13/2014
* */
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;
//使用TabWidge和TabHost,必须继承TabActivity
public class Tab extends TabActivity{

TabHost mTabHost;
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.tab_view);
/**
* 通过getTabHost()方法,来获得TabHost对象
* */
mTabHost = getTabHost();
/**
* 通过addTab()的方法为TabHost添加标签
* 第一步:新建一个标签空间,newTabSpec(newTabSpec)
* 第二步:设置其ID和图标,setIndictor()
* 第三步:关联相关控件,setContent()
* */
mTabHost.addTab(mTabHost.newTabSpec("标签一").setIndicator("Tab 1").setContent(R.id.tv1));
mTabHost.addTab(mTabHost.newTabSpec("标签二").setIndicator("Tab 2").setContent(R.id.tv2));
mTabHost.addTab(mTabHost.newTabSpec("标签三").setIndicator("Tab 3").setContent(R.id.tv3));
//设置TabHost的背景颜色
mTabHost.setBackgroundColor(Color.GRAY);
//设置TabHost的背景图片
mTabHost.setBackgroundResource(R.drawable.ic_launcher);
//设置当前显示哪一个标签
mTabHost.setCurrentTab(0);

//标签切换事件处理:setOnTabChangedListener
mTabHost.setOnTabChangedListener(new OnTabChangeListener() {

@Override
public void onTabChanged(String tabId) {
// TODO Auto-generated method stub
Dialog dialog = new AlertDialog.Builder(Tab.this)
.setTitle("提示").setMessage("当前选中"+tabId+"标签")
.setPositiveButton("确定", new DialogInterface.OnClickListener() {

@Override
public void onClick(DialogInterface dialog, int whickButton) {
// TODO Auto-generated method stub
dialog.cancel();
}
}).create();
dialog.show();
}
});
}
}

然后我们在MainActivity中设置一个button进行跳转即可。

package com.example.demo_tabwidget;
/**
* @author Arthur Lee
* @time 07/13/2014
* */
import org.xml.sax.SAXException;

import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

public class MainActivity extends Activity {

Button button;
TextView tv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

tv = (TextView)findViewById(R.id.tv);
button = (Button)findViewById(R.id.bt);
button.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
Intent intent = new Intent(MainActivity.this,Tab.class);
startActivity(intent);
finish();
}
});
}
}
<?xml version="1.0" encoding="utf-8"?> <!-- 这里必须标注为tabhost --><TabHost xmlns:android="http://schemas.android.com/apk/res/android"    android:id="@android:id/tabhost"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="vertical" >    <LinearLayout        android:layout_width="match_parent"        android:layout_height="match_parent"        android:orientation="vertical">        <!-- 这里的TabWidget必须设置为android的tabs -->        <TabWidget             android:id="@android:id/tabs"            android:layout_height="wrap_content"            android:layout_width="match_parent">            <!-- 这里底层布局必须是tabcontent -->            <FrameLayout                android:id="@android:id/tabcontent"                android:layout_width="match_parent"                android:layout_height="match_parent">                <!-- 一号标签显示内容 -->                <TextView                     android:id="@+id/tv1"                    android:layout_width="match_parent"                    android:layout_height="match_parent"                    android:text="this is the first tab"/>                <!-- 二号标签显示内容 -->                <TextView                     android:id="@+id/tv2"                    android:layout_width="match_parent"                    android:layout_height="match_parent"                    android:text="this is the second tab"/>                <!--三号标签显示内容  -->                <TextView                     android:id="@+id/tv3"                    android:layout_width="match_parent"                    android:layout_height="match_parent"                    android:text="this is the third tab"/>            </FrameLayout>        </TabWidget>    </LinearLayout></TabHost>

     但是在这里提醒各位看客,自从有了Fragment,这个TabHost已经被认为是过时了,所以新版的sdk中不会再有这个类了

      最后用一句话结尾:我不一个好的程序员,因为我只会默默奉献。