Android的TabHost是一个很好的分页的控件
能够把自己的程序的多个activity组织起来
这里面联系到的概念有ActivityGroup
TabActivity
使用TabHost构建程序有两种方法
一种是在java代码里,一种是在xml代码里
一种方法是在java里直接写
private TabHost mtabHost; mtabHost = getTabHost(); mtabHost.addTab(mtabHost.newTabSpec("tab1") .setIndicator(getString(R.string.tabs_1_tab_1), getResources().getDrawable(R.drawable.undo)) .setContent(this)); mtabHost.addTab(mtabHost.newTabSpec("tab2") .setIndicator(getString(R.string.tabs_1_tab_2),getResources().getDrawable(R.drawable.undo)) .setContent(this)); mtabHost.addTab(mtabHost.newTabSpec("tab3") .setIndicator(getString(R.string.tabs_1_tab_3),getResources().getDrawable(R.drawable.undo)) .setContent(this)); mtabHost.addTab(mtabHost.newTabSpec("tab4") .setIndicator(getString(R.string.tabs_1_tab_4),getResources().getDrawable(R.drawable.undo)) .setContent(new Intent(this, inviteTab.class))); mtabHost.addTab(mtabHost.newTabSpec("tab5") .setIndicator(getString(R.string.tabs_1_tab_5),getResources().getDrawable(R.drawable.tab_set)) .setContent(this)); mtabHost.addTab(mtabHost.newTabSpec("tab6") .setIndicator(getString(R.string.tabs_1_tab_6),getResources().getDrawable(R.drawable.undo)) .setContent(this)); mtabHost.addTab(mtabHost.newTabSpec("tab7") .setIndicator(getString(R.string.tabs_1_tab_7),getResources().getDrawable(R.drawable.tab_help)) .setContent(this)); mtabHost.addTab(mtabHost.newTabSpec("tab8") .setIndicator(getString(R.string.tabs_1_tab_8),getResources().getDrawable(R.drawable.tab_help)) .setContent(this)); mtabHost.setOnTabChangedListener( this);
然后需要重载两个函数
public void onTabChanged(String tagString) { // TODO Auto-generated method stub } @Override public View createTabContent(String arg0) { final TextView tv = new TextView(this); tv.setText("Content for tab with tag " + arg0); return tv; }
这样就可以实现一个初步的TabHost
另外一种方法
还可以在xml文件里画TabHost界面
比如最近我做一个项目,就遇到需要把TabHost放在屏幕下方
代码如下
这是main.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <TabHost android:id="@+id/edit_item_tab_host" android:layout_width="fill_parent" android:layout_height="fill_parent"> <LinearLayout android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" android:padding="5dp"> <FrameLayout android:id="@android:id/tabcontent" android:layout_width="fill_parent" android:layout_height="wrap_content" android:padding="5dp" android:layout_weight="1" /> <TabWidget android:id="@android:id/tabs" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_weight="0" /> </LinearLayout> </TabHost> </LinearLayout>
主文件里
public static TabHost tab_host; setContentView(R.layout.main); tab_host = (TabHost) findViewById(R.id.edit_item_tab_host); tab_host.setup(this.getLocalActivityManager()); TabSpec ts1 = tab_host.newTabSpec("TAB_1"); ts1.setIndicator(getString(R.string.a),getResources().getDrawable(R.drawable.a)); ts1.setContent(new Intent(this, a.class)); tab_host.addTab(ts1); TabSpec ts2 = tab_host.newTabSpec("TAB_2"); ts2.setIndicator(getString(R.string.b),getResources().getDrawable(R.drawable.b)); ts2.setContent(new Intent(this, b.class)); tab_host.addTab(ts2); TabSpec ts3 = tab_host.newTabSpec("TAB_3"); ts3.setIndicator(getString(R.string.c),getResources().getDrawable(R.drawable.c)); ts3.setContent(new Intent(this, c.class)); tab_host.addTab(ts3); TabSpec ts4 = tab_host.newTabSpec("TAB_4"); ts4.setIndicator(getString(R.string.d),getResources().getDrawable(R.drawable.d)); ts4.setContent(new Intent(this, d.class)); tab_host.addTab(ts4); tab_host.setCurrentTab(0); tab_host.setOnTabChangedListener(new OnTabChangeListener(){ @Override public void onTabChanged(String tabId) { // TODO Auto-generated method stub });
这样就可以构建出一个很好的TabHost的界面