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))); 

 }
}

效果图如下:

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

(0)

相关推荐

  • android中TabHost的图标(48×48)和文字叠加解决方法

    开发过程中,有时候图标稍微大点,比如48×48的时候,文字就会和图标叠加起来,解决方法如下: 复制代码 代码如下: TabWidget tw = tabHost.getTabWidget(); for (int i = 0; i < tw.getChildCount(); i++) {     TextView tv=(TextView)tw.getChildAt(i).findViewById(android.R.id.title);     ImageView iv=(ImageView)t

  • android 选项卡(TabHost)如何放置在屏幕的底部

    今天写Tab的时候由于TAB的跳转问题去查资料,倒反而发现更有趣的问题,就是如何将TAB放置在屏幕的底端. 复制代码 代码如下: <?xml version="1.0" encoding="utf-8"?> <TabHost xmlns:android="http://schemas.android.com/apk/res/android" android:id="@android:id/tabhost" a

  • Android控件之TabHost用法实例分析

    本文实例讲述了Android控件之TabHost用法.分享给大家供大家参考.具体如下: 以下通过TabHost实现android选项卡. main.xml布局文件: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width=

  • Android组件必学之TabHost使用方法详解

    一.TabHost用法 通常情况下我们会通过继承TabActivity,调用getTabHost()获取TabHost实例,下面是具体过程. TabHostActivity.java public class TabHostActivity extends TabActivity { private TabHost tabHost; private Intent certificateIntent; private Intent feeIntent; private Intent scoreIn

  • Android组件TabHost实现页面中多个选项卡切换效果

    TabHost组件可以在界面中存放多个选项卡, 很多软件都使用了改组件进行设计. 一.基础知识 TabWidget : 该组件就是TabHost标签页中上部 或者 下部的按钮, 可以点击按钮切换选项卡; TabSpec : 代表了选项卡界面, 添加一个TabSpec即可添加到TabHost中; -- 创建选项卡 : newTabSpec(String tag), 创建一个选项卡; -- 添加选项卡 : addTab(tabSpec); 二.实例讲解 TabHost的基本使用,主要是layout的

  • 详解Android TabHost的多种实现方法 附源码下载

    最近仔细研究了下TabHost,主要是为了实现微信底部导航栏的功能,最后也给出一个文章链接,大家不要着急 正文: TabHost的实现分为两种,一个是不继承TabActivity,一个是继承自TabActivity:当然了选用继承自TabActivity的话就相对容易一些,下面来看看分别是怎样来实现的吧. 方法一.定义tabhost:不用继承TabActivity  1.布局文件:activity_main.xml <LinearLayout xmlns:android="http://s

  • Android程序开发之自定义设置TabHost,TabWidget样式

    先看效果: 京东商城底部菜单栏 新浪微博底部菜单栏 本次学习效果图: 第一,主布局文件(启动页main.xml,位于res/layout目录下)代码 <?xml version="." encoding="utf-"?> <TabHost xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_paren

  • Android入门之TabHost与TabWidget实例解析

    本文实例介绍的是Android的Tab控件,Tab控件可以达到分页的效果,让一个屏幕的内容尽量丰富,当然也会增加开发的复杂程度,在有必要的时候再使用.Android的Tab控件使用起来有点奇怪,必须包含和按照以下的顺序: TabHost控件->TabWidget(必须命名为tabs)->FrameLayout(必须命名为tabcontent). 先来贴出本例运行的截图: main.xml的源码如下: <?xml version="1.0" encoding="

  • Android中使用TabHost 与 Fragment 制作页面切换效果

    三个标签页置于顶端 效果图: 在文件BoardTabHost.java中定义页面切换的效果:切换页面时,当前页面滑出,目标页面滑入.这是2个不同的动画设定动画时要区分对待 import android.content.Context; import android.util.AttributeSet; import android.view.animation.Animation; import android.view.animation.TranslateAnimation; import

  • android TabHost(选项卡)的使用方法

    首先,定义TabHost的布局文件: 复制代码 代码如下: <?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="fill_p

随机推荐