灯火互联
管理员
管理员
  • 注册日期2011-07-27
  • 发帖数41778
  • QQ
  • 火币41290枚
  • 粉丝1086
  • 关注100
  • 终身成就奖
  • 最爱沙发
  • 忠实会员
  • 灌水天才奖
  • 贴图大师奖
  • 原创先锋奖
  • 特殊贡献奖
  • 宣传大使奖
  • 优秀斑竹奖
  • 社区明星
阅读:2786回复:0

Android TabHost用法详解

楼主#
更多 发布于:2012-09-06 14:03

最近研究了一下Contacts源码,仿照上面自己写了一个TabHostTest程序,现整理如下:
main.xml布局文件:
[html]
<?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文件:
[html]
<?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类):
[java]
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类:
[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)));

    }
}
效果图如下:





喜欢0 评分0
游客

返回顶部