一、TabHost可以很方便的在窗口上放置多个标签页,每个标签页相当于获得了一个与外部容器相同大小的组件摆放区域。TabHost仅仅是一个简单的容器,它提供了如下两个方法创建选项卡、添加选项卡:
-->newTabSpec(String tag):创建选项卡
-->addTab(TabHost.TabSpec tabSpec):添加选项卡
使用TabHost的一般步骤:
1.在界面布局中定义TabHost组件,并为该组件定义该选项卡的内容;
2.Activity应该继承TabActivity;
3.调用TabActivity的getTabHost()获取TabHost对象;
4.通过TabHost对象的方法来创建选项卡,添加选项卡。
package com.javaee;
import android.app.Activity;
import android.app.TabActivity;
import android.graphics.Color;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
import android.widget.TabHost;
import android.widget.TabHost.OnTabChangeListener;
public class MainActivity extends TabActivity implements OnTabChangeListener{
/** Called when the activity is first created. */
private TabHost tabHost;
private int myMenuSetting = 0;
private Menu menu;
private static final int myMenuResources[] = {R.menu.a_menu, R.menu.b_menu, R.menu.c_menu};
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
tabHost = getTabHost();
LayoutInflater.from(this).inflate(R.layout.main, tabHost.getTabContentView(), true);
tabHost.setBackgroundColor(Color.argb(150, 22, 70, 150));
tabHost.addTab(tabHost.newTabSpec("tab1").setIndicator("A", getResources().getDrawable(R.drawable.gimp)).setContent(R.id.layout01));
tabHost.addTab(tabHost.newTabSpec("tab2").setIndicator("B", getResources().getDrawable(R.drawable.mumule)).setContent(R.id.layout02));
tabHost.addTab(tabHost.newTabSpec("tab3").setIndicator("C", getResources().getDrawable(R.drawable.notepad)).setContent(R.id.layout03));
tabHost.setOnTabChangedListener(this);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// TODO Auto-generated method stub
this.menu = menu;
menu.clear();
MenuInflater inflater = getMenuInflater();
switch (myMenuSetting) {
case 0:
inflater.inflate(myMenuResources[0], menu);
break;
case 1:
inflater.inflate(myMenuResources[1], menu);
break;
case 2:
inflater.inflate(myMenuResources[2], menu);
default:
break;
}
return super.onCreateOptionsMenu(menu);
}
@Override
public void onTabChanged(String tabId) {
// TODO Auto-generated method stub
if(tabId.equals("tab1")){
myMenuSetting = 0;
}else if(tabId.equals("tab2")){
myMenuSetting = 1;
}else if(tabId.equals("tab3")){
myMenuSetting = 2;
}
if(menu != null){
onCreateOptionsMenu(menu);
}
}
}
通过LayoutInflater.from(this).inflate(R.layout.main, tabHost.getContentView, true)为TabHost制定布局;
通过tabHost.addTab(TabHost.TabSpec tabSpec);添加选项卡标签;
通过tabSpec.setIndicator()设置标签样式,其中有三个方法:
1、setIndicator(CharSequence label):指定标签的文本信息;
2、setIndicator(CharSequence label, Drawable icon):指定文本图片标签;
3、setIndicator(View):通过一个View来指定标签。
通过setSpec.setContent()设置各选项卡的内容,其中有三个方法:
1、setContent(TabHost.TabContentFactory contentFactory):通过TabHost.TabContentFactory工厂创建选项卡的内容;
2、setContent(int viewId):通过一个id制定选项卡的内容;
3、setContent(Intent intent):通过一个Intent指定选项卡跳转到一个Activity。
生成LayoutInflater有三种方式:
1、inflater = getLayoutInflater();
2、inflater = LayoutInflater.from(this);
3、inflater = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE);
LayoutInflater.inflate:将Layout文件转换为View。专门供Layout使用的Inflate,虽然Layout也是View的子类,但在android中如果想将其他的xml中的Layout转换为View放入.java代码中操作 , 只能通过Inflater,而不能直接通过findViewById()。