最近在接触android应用开发,上次遇到个需求,需要实现所有的打开视图都包含换页选项卡,当时比较忙查了一下没有太好的实现方式,就没接着搞,今天没什么事情看了一下tabhost源码,原来实现这个效果还挺容易的,只是按返回键时会退出程序,不过这也没关系,自己加个activity的队列过滤一下返回键就可以解决这个问题。
代码如下,简单测试过:通过showActivity方法启动新的activity即可。
public class TabTestActivity extends TabActivity {
private static TabHost tabHost;
private static LocalActivityManager mLocalActivityManager = null;
private static View currentview = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mLocalActivityManager = getLocalActivityManager();
tabHost = getTabHost();
TabSpec tab0 = tabHost.newTabSpec("tab0");
tab0.setIndicator("首页", getResources().getDrawable(R.drawable.icon48x48_1)).setContent(new Intent(this, ListActivityDemo.class));
tabHost.addTab(tab0);
TabSpec tab1 = tabHost.newTabSpec("tab1");
tab1.setIndicator("频道", getResources().getDrawable(R.drawable.icon48x48_1)).setContent(new Intent(this, ChannelActivity.class));
tabHost.addTab(tab1);
TabSpec tab2 = tabHost.newTabSpec("tab2");
tab2.setIndicator("搜索", getResources().getDrawable(R.drawable.icon48x48_1)).setContent(new Intent(this, SearchActivity.class));
tabHost.addTab(tab2);
TabSpec tab3 = tabHost.newTabSpec("tab3");
tab3.setIndicator("历史", getResources().getDrawable(R.drawable.icon48x48_1)).setContent(new Intent(this, ListActivityDemo1.class));
tabHost.addTab(tab3);
TabSpec tab4 = tabHost.newTabSpec("tab4");
tab4.setIndicator("更多", getResources().getDrawable(R.drawable.icon48x48_1)).setContent(new Intent(this, MoreActivity.class));
tabHost.addTab(tab4);
// add by mustang,这段代码让TAB在屏幕下边显示
TabWidget tabWidget = tabHost.getTabWidget();
LinearLayout lLayout = (LinearLayout) tabHost.getChildAt(0);
lLayout.removeViewAt(0);
//去掉tab下边那条白线,1.6 sdk貌似不支持
// tabWidget.setStripEnabled(false);
lLayout.addView(tabWidget);
tabHost.setOnTabChangedListener(new OnTabChangeListenerImple());
}
class OnTabChangeListenerImple implements OnTabChangeListener {
@Override
public void onTabChanged(String tabId) {
if (currentview != null) {
tabHost.getTabContentView().removeView(currentview);
tabHost.setCurrentTabByTag(tabId);
}
}
}
public static void showActivity(Intent newintent) {
tabHost.getTabContentView().removeView(tabHost.getCurrentView());
currentview = getContentView(newintent);
tabHost.getTabContentView().addView(currentview);
}
public static View getContentView(Intent mIntent) {
if (mLocalActivityManager == null) {
throw new IllegalStateException("Did you forget to call 'public void setup(LocalActivityManager activityGroup)'?");
}
final Window w = mLocalActivityManager.startActivity(System.currentTimeMillis() + "", mIntent);
final View wd = w != null ? w.getDecorView() : null;
return wd;
}
}