Android TabHost用法详解

来源:互联网 发布:不知者不愠不亦君子乎 编辑:程序博客网 时间:2024/06/11 02:44

最近研究了一下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">s        <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)));    }}

效果图如下:



原创粉丝点击