第一种:继承TabActivity,从TabActivity中用getTabHost()方法获取TabHost。只要定义具体Tab内容布局就行了.

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"android:id="@+id/FrameLayout01" android:layout_width="wrap_content" android:layout_height="wrap_content"><TextView android:id="@+id/TextView01" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="所有通话记录"></TextView><TextView android:id="@+id/TextView02" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="已接来电"></TextView><TextView android:id="@+id/TextView03" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="未接来电"></TextView></FrameLayout>
 package com.example.testtabhost;import android.app.TabActivity;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.widget.TabHost;
import android.widget.Toast;
import android.widget.TabHost.OnTabChangeListener;public class MainActivity extends TabActivity {@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);TabHost th = getTabHost();//声明TabHost,然后用LayoutInflater过滤出布局来,给TabHost加上含有Tab页面的FrameLayout//from(this)从这个TabActivity获取LayoutInflater  //R.layout.main 存放Tab布局//通过TabHost获得存放Tab标签页内容的FrameLayout  //是否将inflate 拴系到根布局元素上LayoutInflater.from(this).inflate(R.layout.activity_main, th.getTabContentView(), true); //通过TabHost获得存放Tab标签页内容的FrameLayout,//newTabSpecd的作用是获取一个新的 TabHost.TabSpec,并关联到当前 TabHost//setIndicator的作用是指定标签和图标作为选项卡的指示符.//setContent的作用是指定用于显示选项卡内容的视图 ID.th.addTab(th.newTabSpec("all").setIndicator("所有通话记录", getResources().getDrawable(R.drawable.ic_launcher)).setContent(R.id.TextView01));th.addTab(th.newTabSpec("ok").setIndicator("已接来电",getResources().getDrawable(R.drawable.ic_launcher)).setContent(R.id.TextView02));th.addTab(th.newTabSpec("cancel").setIndicator("未接来电",getResources().getDrawable(R.drawable.ic_launcher)).setContent(R.id.TextView03));//setOnTabChangeListener的作业是注册一个回调函数,当任何一个选项卡的选中状态发生改变时调用.  th.setOnTabChangedListener(new OnTabChangeListener() {@Overridepublic void onTabChanged(String tabId) {Toast.makeText(MainActivity.this, tabId, Toast.LENGTH_LONG).show();}});       }
}

第二种:不用继承TabActivity,在布局文件中定义TabHost即可,但是TabWidget的id必须是 
@android:id/tabs,FrameLayout的id必须是@android:id/tabcontent。TabHost的id可以自定义.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  android:id="@+id/hometabs"android:orientation="vertical"android:layout_width="fill_parent"  android:layout_height="fill_parent"> <TabHost android:id="@+id/tabhost"android:layout_width="wrap_content"android:layout_height="wrap_content"><LinearLayoutandroid:orientation="vertical"android:layout_width="fill_parent"android:layout_height="fill_parent"><TabWidget android:id="@android:id/tabs" android:orientation="horizontal"android:layout_width="wrap_content"android:layout_height="wrap_content"></TabWidget><FrameLayout android:id="@android:id/tabcontent"android:layout_width="wrap_content"android:layout_height="wrap_content"><TextView android:id="@+id/view1"android:layout_width="fill_parent"android:layout_height="fill_parent"/><TextView android:id="@+id/view2"android:layout_width="fill_parent"android:layout_height="fill_parent"/><TextView android:id="@+id/view3"android:layout_width="fill_parent"android:layout_height="fill_parent"/></FrameLayout></LinearLayout></TabHost>
</LinearLayout>
package com.example.testtabhost2;import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.widget.TabHost;
import android.widget.TabWidget;public class MainActivity extends Activity {private static final String TAG = "MainActivity";protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);TabHost tabHost = (TabHost) findViewById(R.id.tabhost);tabHost.setup();TabWidget tabWidget = tabHost.getTabWidget();tabHost.addTab(tabHost.newTabSpec("tab1").setIndicator("tab1", getResources().getDrawable(R.drawable.ic_launcher)).setContent(R.id.view1));tabHost.addTab(tabHost.newTabSpec("tab3").setIndicator("tab3").setContent(R.id.view3));tabHost.addTab(tabHost.newTabSpec("tab2").setIndicator("tab2").setContent(R.id.view2));final int tabs = tabWidget.getChildCount();Log.i(TAG, "***tabWidget.getChildCount() : " + tabs);final int tabWidth = 90;final int tabHeight = 45;for (int i = 0; i < tabs; i++) {/*    final View view = tabWidget.getChildAt(i);view.getLayoutParams().width = tabWidth;view.getLayoutParams().height = tabHeight;final TextView tv = (TextView) view.findViewById(android.R.id.title);tv.setTextColor(this.getResources().getColorStateList(android.R.color.black));MarginLayoutParams tvMLP = (MarginLayoutParams)tv.getLayoutParams();tvMLP.bottomMargin = 8;*/}}}

转载于:https://www.cnblogs.com/lanzhi/p/6469829.html

TabHost两种实现方式相关推荐

  1. C++中的两种绑定方式(静态绑定、动态绑定)

    两种绑定方式 静态绑定:在编译时刻,根据指针或引用变量的静态类型来决定成员函数属于哪一个类. 动态绑定:在运行时刻,根据指针或引用变量实际指向或引用的对象类型(动态类型)来确定成员函数属于哪一个类. ...

  2. (C++)string 的两种输入方式和输出方式

    注:头文件如下 #include<string> #include<cstdio> #include<iostream>using namespace std; 注 ...

  3. 三十张图片让你彻底弄明白图的两种遍历方式:DFS和BFS

    1 引言   遍历是指从某个节点出发,按照一定的的搜索路线,依次访问对数据结构中的全部节点,且每个节点仅访问一次.图的遍历.遍历过程中得到的顶点序列称为图遍历序列. 2 深度优先搜索 2.1 算法思想 ...

  4. Java两种排序方式快慢比较

    2019独角兽企业重金招聘Python工程师标准>>> Java中List的排序方式有两种,现在我们测试下这两种排序方式的快慢吧,我们需要用到两个类, 一个是运行程序的Main类,另 ...

  5. Vivado IP的两种综合方式:Global 和 Out-Of-Context

    在最新的Vivado的版本中,定制IP的时候,会有一个综合方式的选择,如下图所示.可以看到一种叫做"Global",一种叫"Out-Of-Context (OOC)&qu ...

  6. IOS单例的两种实现方式

    单例模式算是开发中比较常见的一种模式了.在iOS中,单例有两种实现方式(至少我目前只发现两种). 根据线程安全的实现来区分,一种是使用@synchronized ,另一种是使用GCD的dispatch ...

  7. chrome拦截弹窗问题的两种解决方式

    chrome拦截弹窗问题的两种解决方式 参考文章: (1)chrome拦截弹窗问题的两种解决方式 (2)https://www.cnblogs.com/CaiDaili/p/9228455.html ...

  8. Silve37.Silverlight和ASP.NET相互传参的两种常用方式(QueryString,Cookie)

    在本节中将讲述Silverlight和ASP.NET页面的相互传参的两种常用方式:Cookie和QueryString.首先我们新建一个名 为SLConnectASP.NET的Silverlight应 ...

  9. redis的两种持久化方式详解

    一.背景 在实际开发中,为了保证数据的完整性,防止数据丢失,我们除了在原有的传统数据库保存数据的同时,最好是再用redis持久化再保存一次数据.如果仅仅是使用redis而不进行持久化配置的话,当red ...

最新文章

  1. iOS之CAEmitterLayer粒子引擎
  2. 编写Java 制作留言板_JSP+Servlet+JavaBean制作简单留言板
  3. NOIP模拟题——dun
  4. IntelliJ IDEA 建空包合并问题。
  5. 心跳检测以及应用层心跳包机制设计
  6. C++ STL vector的输出
  7. 数字图像处理 频率域锐化 MATLAB实验
  8. 计算机应用能力考试用书有哪些,全国专业技术人员计算机应用能力考试用书
  9. linux的码是什么东西,在Linux内核中的UD2操作码的目的是什么?
  10. vue3新增Suspense组件
  11. java中PriorityQueue优先级队列使用方法
  12. 消防物联网,为逆行英雄守住第一道生命线
  13. 机器学习的分类(监督学习、非监督学习、半监督学习)
  14. OrCAD DSN文件无故消失解决办法
  15. 从冬奥会看中国科技:全民感谢的高速摄像机,有何玄机?
  16. android防止程序休眠,android 设置 永不休眠
  17. Maven实战 4 -- Maven核心概念
  18. C# 中的MessageBox 弹出提示框(消息框)的用法
  19. R学习之统计实验(五)--赶火车问题(R语言编程)-----数模
  20. LYL程序员小白的理解之简单易懂的Arduino的串口通讯

热门文章

  1. Cloudstack系统配置(三)
  2. Java记录 -6- 流程控制语句
  3. 架构设计:远程调用服务架构设计及zookeeper技术详解(上篇)
  4. 《转》CXF WebService 开发文档-目录索引
  5. 使用mysql_fetch_array()获取当前行数据
  6. 取消IE不允许下载文件的提示
  7. python交互界面用图片当背景_wxPython实现窗口用图片做背景
  8. webpack常用配置
  9. java学习(七)java中抽象类及 接口
  10. 篇三:访问JSON静态文件