加入收藏 | 设为首页 | 会员中心 | 我要投稿 开发网_郴州站长网 (http://www.0735zz.com/)- 云通信、区块链、物联设备、云计算、站长网!
当前位置: 首页 > 教程 > 正文

Android TabHost用法分析

发布时间:2021-12-15 20:08:21 所属栏目:教程 来源:互联网
导读:最近研究了一下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:layou

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

(编辑:开发网_郴州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读