今天小编向大家介绍一下在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中不会再有这个类了
最后用一句话结尾:我不一个好的程序员,因为我只会默默奉献。