Android TabHost组件使用方法详解

最近研究了一下Contacts源码,仿照上面自己写了一个TabHostTest程序,现整理如下:

main.xml布局文件:

<?xml version="1.0" encoding="utf-8"?> <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">   <LinearLayout   android:orientation="vertical"   android:layout_width="match_parent"   android:layout_height="match_parent">    <TabWidget android:id="@android:id/tabs"    android:layout_width="match_parent"    android:layout_height="wrap_content"   />    <FrameLayout android:id="@android:id/tabcontent"    android:layout_width="match_parent"    android:layout_height="0dip"    android:layout_weight="1"   />  </LinearLayout> </TabHost> 

inner.xml文件:

<?xml version="1.0" encoding="utf-8"?>  <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">   <LinearLayout   android:orientation="vertical"   android:layout_width="match_parent"   android:layout_height="match_parent">    <FrameLayout android:id="@android:id/tabcontent"    android:layout_width="fill_parent"    android:layout_height="0dip"    android:layout_weight="1"   />      <TabWidget android:id="@android:id/tabs"    android:layout_width="fill_parent"    android:layout_height="wrap_content"   />    </LinearLayout> </TabHost>

Main.java (主Activity类):

package com.android.test;  import android.app.Activity; import android.app.TabActivity; import android.content.Intent; import android.os.Bundle; import android.provider.CallLog.Calls; import android.provider.Contacts.Intents.UI; import android.view.Window; import android.widget.TabHost;  public class Main extends TabActivity implements TabHost.OnTabChangeListener {  private static final int TAB_INDEX_DIALER = 0;  private static final int TAB_INDEX_CALL_LOG = 1;  private static final int TAB_INDEX_CONTACTS = 2;  private static final int TAB_INDEX_FAVORITES = 3;   private TabHost mTabHost;    @Override  public void onCreate(Bundle savedInstanceState) {   super.onCreate(savedInstanceState);    final Intent intent = getIntent();    requestWindowFeature(Window.FEATURE_NO_TITLE);      setContentView(R.layout.main);    mTabHost = getTabHost();   mTabHost.setOnTabChangedListener(this);    // Setup the tabs   setupDialerTab();   setupCallLogTab();   setupContactsTab();   setupFavoritesTab();    setCurrentTab(intent);  }   public void onTabChanged(String tabId) {    Activity activity = getLocalActivityManager().getActivity(tabId);    if (activity != null) {     activity.onWindowFocusChanged(true);    }  }   private void setupCallLogTab() {    // Force the class since overriding tab entries doesn't work    Intent intent = new Intent("com.android.phone.action.RECENT_CALLS");     intent.setClass(this, Inner.class);    mTabHost.addTab(mTabHost.newTabSpec("call_log")      .setIndicator("通话记录",        getResources().getDrawable(R.drawable.ic_tab_unselected_recent))      .setContent(intent));   }    private void setupDialerTab() {   Intent intent = new Intent("com.android.phone.action.TOUCH_DIALER");   intent.setClass(this, Inner.class);    mTabHost.addTab(mTabHost.newTabSpec("dialer")     .setIndicator("拨号",       getResources().getDrawable(R.drawable.ic_tab_unselected_dialer))     .setContent(intent));  }   private void setupContactsTab() {   Intent intent = new Intent(UI.LIST_DEFAULT);   intent.setClass(this, Main.class);    mTabHost.addTab(mTabHost.newTabSpec("contacts")     .setIndicator("通讯录",       getResources().getDrawable(R.drawable.ic_tab_unselected_contacts))     .setContent(intent));  }   private void setupFavoritesTab() {   Intent intent = new Intent(UI.LIST_STREQUENT_ACTION);   intent.setClass(this, Inner.class);    mTabHost.addTab(mTabHost.newTabSpec("favorites")     .setIndicator("收藏",       getResources().getDrawable(R.drawable.ic_tab_unselected_starred))     .setContent(intent));  }   /**   * Sets the current tab based on the intent's request type   *   * @param intent Intent that contains information about which tab should be selected   */  private void setCurrentTab(Intent intent) {   // Dismiss menu provided by any children activities   Activity activity = getLocalActivityManager().     getActivity(mTabHost.getCurrentTabTag());   if (activity != null) {    activity.closeOptionsMenu();   }    // Tell the children activities that they should ignore any possible saved   // state and instead reload their state from the parent's intent   intent.putExtra("", true);    // Choose the tab based on the inbound intent   String componentName = intent.getComponent().getClassName();   if (getClass().getName().equals(componentName)) {    if (false) {     //in a call, show the dialer tab(which allows going back to the call)     mTabHost.setCurrentTab(TAB_INDEX_DIALER);    } else if ((intent.getFlags() & Intent.FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY) != 0) {     // launched from history (long-press home) --> nothing to change    } else if (true) {     // The dialer was explicitly requested     mTabHost.setCurrentTab(TAB_INDEX_DIALER);    }   }  } } 

Inner.java类:

package com.android.test;  import android.app.TabActivity; import android.content.Intent; import android.os.Bundle; import android.view.Window; import android.widget.TabHost; import android.widget.TabWidget; import android.widget.TextView;  public class Inner extends TabActivity implements TabHost.OnTabChangeListener {  private static final int TAB_INDEX_ALL = 0;  private static final int TAB_INDEX_MISSED = 1;  private static final int TAB_INDEX_OUTGOING = 2;  private static final int TAB_INDEX_RECEIVED = 3;   private TabHost mTabHost;  private TabWidget mTabWidget;    @Override  public void onCreate(Bundle savedInstanceState) {   super.onCreate(savedInstanceState);   requestWindowFeature(Window.FEATURE_NO_TITLE);   setContentView(R.layout.inner);    mTabHost = getTabHost();   mTabHost.setOnTabChangedListener(this);    setupTabs();   mTabWidget = mTabHost.getTabWidget();   mTabWidget.setStripEnabled(false);    for (int i = 0; i < mTabWidget.getChildCount(); i++) {     TextView tv = (TextView) mTabWidget.getChildAt(i).findViewById(      android.R.id.title);    tv.setTextColor(this.getResources().getColorStateList(      android.R.color.white));        tv.setPadding(0, 0, 0,(int) tv.getTextSize());    tv.setText("Tab" + i);    mTabWidget.getChildAt(i).getLayoutParams().height =(int ) (3* tv.getTextSize());     mTabWidget.getChildAt(i).setBackgroundResource(R.drawable.tab_bg);   }  }   public void onTabChanged(String tabId) {     }   private void setupTabs() {   mTabHost.addTab(mTabHost.newTabSpec("all").setIndicator(     getString(R.string.inner)).setContent(     new Intent(this, Other.class)));   mTabHost.addTab(mTabHost.newTabSpec("Missed").setIndicator(     getString(R.string.inner)).setContent(     new Intent(this, Other.class)));   mTabHost.addTab(mTabHost.newTabSpec("Outgoing").setIndicator(     getString(R.string.inner)).setContent(     new Intent(this, Other.class)));   mTabHost.addTab(mTabHost.newTabSpec("Received").setIndicator(     getString(R.string.inner)).setContent(     new Intent(this, Other.class)));   } } 

效果图如下:

以上就是本文的全部内容,希望能给大家一个参考,也希望大家多多支持。

也和他共度。甚至连吵架也是重复的,

Android TabHost组件使用方法详解

相关文章:

你感兴趣的文章:

标签云: