Tab與TabHost
這就是Tab,而盛放Tab的容器就是TabHost
如何實(shí)現(xiàn)??
每一個(gè)Tab還對(duì)應(yīng)了一個(gè)布局,這個(gè)就有點(diǎn)好玩了。一個(gè)Activity,對(duì)應(yīng)了多個(gè)功能布局。
①新建一個(gè)Tab項(xiàng)目,注意,不要生成main Activity
這里不要選
②在包里面新建一個(gè)類MyTab,繼承于TabActivity
其實(shí),TabActivity是Activity的子類
- package zyf.tab.test;
- import android.app.TabActivity;
- public class MyTab extends TabActivity {
- }
復(fù)制代碼③從父類繼承OnCreate()入口方法
- package zyf.tab.test;
- import android.app.TabActivity;
- import android.os.Bundle;
- public class MyTab extends TabActivity {
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- // TODO Auto-generated method stub
- super.onCreate(savedInstanceState);
- }
- }
復(fù)制代碼④在Manifest.xml文件中注冊(cè)一下MyTab類(Activity)
- <activity android:name=".MyTab">
- <intent-filter>
- <action android:name="android.intent.action.MAIN"></action>
- <category android:name="android.intent.category.LAUNCHER"></category>
- </intent-filter>
- </activity>
復(fù)制代碼⑤這時(shí)候,需要設(shè)計(jì)一下標(biāo)簽頁(yè)對(duì)應(yīng)的布局,一般采用FrameLayout作為根布局,每個(gè)標(biāo)簽頁(yè)面對(duì)應(yīng)一個(gè)子節(jié)點(diǎn)的Layout
- <?xml version="1.0" encoding="utf-8"?>
- <!-- 這里是根節(jié)點(diǎn)布局 -- >
- <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="fill_parent" android:layout_height="fill_parent">
- <!-- 第一個(gè)Tab 對(duì)應(yīng)的布局 -- >
- <LinearLayout android:id="@+id/widget_layout_Blue"
- android:layout_width="fill_parent" android:layout_height="fill_parent"
- androidrientation="vertical" >
- <EditText android:id="@+id/widget34" android:layout_width="fill_parent"
- android:layout_height="wrap_content" android:text="EditText"
- android:textSize="18sp">
- </EditText>
- <Button android:id="@+id/widget30" android:layout_width="wrap_content"
- android:layout_height="wrap_content" android:text="Button">
- </Button>
- </LinearLayout>
- <!-- 第二個(gè)Tab 對(duì)應(yīng)的布局 -- >
- <LinearLayout android:id="@+id/widget_layout_red"
- android:layout_width="fill_parent" android:layout_height="fill_parent"
- androidrientation="vertical" >
- <AnalogClock android:id="@+id/widget36"
- android:layout_width="wrap_content" android:layout_height="wrap_content">
- </AnalogClock>
- </LinearLayout>
- <!-- 第三個(gè)Tab 對(duì)應(yīng)的布局 -- >
- <LinearLayout android:id="@+id/widget_layout_green"
- android:layout_width="fill_parent" android:layout_height="fill_parent"
- androidrientation="vertical">
- <RadioGroup android:id="@+id/widget43"
- android:layout_width="166px" android:layout_height="98px"
- androidrientation="vertical">
- <RadioButton android:id="@+id/widget44"
- android:layout_width="wrap_content" android:layout_height="wrap_content"
- android:text="RadioButton">
- </RadioButton>
- <RadioButton android:id="@+id/widget45"
- android:layout_width="wrap_content" android:layout_height="wrap_content"
- android:text="RadioButton">
- </RadioButton>
- </RadioGroup>
- </LinearLayout>
- </FrameLayout>
復(fù)制代碼⑥首先,應(yīng)該聲明TabHost,然后用LayoutInflater過(guò)濾出布局來(lái),給TabHost加上含有Tab頁(yè)面的FrameLayout
- private TabHost myTabhost;
- myTabhost=this.getTabHost();//從TabActivity上面獲取放置Tab的TabHost
- LayoutInflater.from(this).inflate(R.layout.main, myTabhost.getTabContentView(), true);
- //from(this)從這個(gè)TabActivity獲取LayoutInflater
- //R.layout.main 存放Tab布局
- //通過(guò)TabHost獲得存放Tab標(biāo)簽頁(yè)內(nèi)容的FrameLayout
- //是否將inflate 拴系到根布局元素上
- myTabhost.setBackgroundColor(Color.argb(150, 22, 70, 150));
- //設(shè)置一下TabHost的顏色
復(fù)制代碼⑦接著,在TabHost創(chuàng)建一個(gè)標(biāo)簽,然后設(shè)置一下標(biāo)題/圖標(biāo)/標(biāo)簽頁(yè)布局
- myTabhost
- .addTab(myTabhost.newTabSpec("TT")// 制造一個(gè)新的標(biāo)簽TT
- .setIndicator("KK",
- getResources().getDrawable(R.drawable.ajjc))
- // 設(shè)置一下顯示的標(biāo)題為KK,設(shè)置一下標(biāo)簽圖標(biāo)為ajjc
- .setContent(R.id.widget_layout_red));
- //設(shè)置一下該標(biāo)簽頁(yè)的布局內(nèi)容為R.id.widget_layout_red,這是FrameLayout中的一個(gè)子Layout
復(fù)制代碼⑧標(biāo)簽切換事件處理,setOnTabChangedListener
- myTabhost.setOnTabChangedListener(new OnTabChangeListener(){
- @Override
- public void onTabChanged(String tabId) {
- // TODO Auto-generated method stub
- }
- });
復(fù)制代碼⑨各個(gè)標(biāo)簽頁(yè)的動(dòng)態(tài)MENU
先把在XML中設(shè)計(jì)好的MENU放到一個(gè)int數(shù)組里
- private static final int myMenuResources[] = { R.menu.phonebook_menu,
- R.menu.addphone_menu, R.menu.chatting_menu, R.menu.userapp_menu };
復(fù)制代碼在setOnTabChangedListener()方法中根據(jù)標(biāo)簽的切換情況來(lái)設(shè)置myMenuSettingTag
- @Override
- public void onTabChanged(String tagString) {
- // TODO Auto-generated method stub
- if (tagString.equals("One")) {
- myMenuSettingTag = 1;
- }
- if (tagString.equals("Two")) {
- myMenuSettingTag = 2;
- }
- if (tagString.equals("Three")) {
- myMenuSettingTag = 3;
- }
- if (tagString.equals("Four")) {
- myMenuSettingTag = 4;
- }
- if (myMenu != null) {
- onCreateOptionsMenu(myMenu);
- }
- }
復(fù)制代碼然后onCreateOptionsMenu(Menu menu) 方法中通過(guò)MenuInflater過(guò)濾器動(dòng)態(tài)加入MENU
- @Override
- public boolean onCreateOptionsMenu(Menu menu) {
- // TODO Auto-generated method stub
- // Hold on to this
- myMenu = menu;
- myMenu.clear();//清空MENU菜單
- // Inflate the currently selected menu XML resource.
- MenuInflater inflater = getMenuInflater();
- //從TabActivity這里獲取一個(gè)MENU過(guò)濾器
- switch (myMenuSettingTag) {
- case 1:
- inflater.inflate(myMenuResources[0], menu);
- //動(dòng)態(tài)加入數(shù)組中對(duì)應(yīng)的XML MENU菜單
- break;
- case 2:
- inflater.inflate(myMenuResources[1], menu);
- break;
- case 3:
- inflater.inflate(myMenuResources[2], menu);
- break;
- case 4:
- inflater.inflate(myMenuResources[3], menu);
- break;
- default:
- break;
- }
- return super.onCreateOptionsMenu(menu);
- }
復(fù)制代碼⑩運(yùn)行效果
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)
點(diǎn)擊舉報(bào)。