TabHost——标签页

==》

TabHost,可以在窗口放置多个标签页,每个标签页相当于获得了一个与外部容器相同大小的组件摆放区域。

通过此种方式可以实现在一个容器放置更多组件(EG:通话记录实现方式)。

TabHost仅仅是一个简单的容器,其提供了如下两个方法来创建选项卡、添加选项卡

==》

  newTabSpec(String tag):创建选项卡

  addTab(TabHost.TabSpec tabspec):添加选项卡

使用TabHost的一般步骤:

  1.在界面布局中定义TabHost组件,并为该组件定义选项卡的内容;

  2.Activity继承TabActivity;

  3.调用TabActivity的getTabHost()方法获取TabHost对象;

  4.通过TabHost对象的方法创建或添加选项卡;

注意:TabHost还提供了一些方法获取当前选项卡,获取当前View的方法;可通过TabHost.OnTabChangeListener监听器——监控TabHost当前页签的改变。

    TabWidget : 该组件就是TabHost标签页中上部 或者 下部的按钮, 可以点击按钮切换选项卡;

    TabSpec : 代表了选项卡界面, 添加一个TabSpec即可添加到TabHost中;

实例如下:

  1. 布局文件==>
  2. <TabHost xmlns:android="http://schemas.android.com/apk/res/android"
  3. xmlns:tools="http://schemas.android.com/tools"
  4. android:id="@android:id/tabhost"
  5. android:layout_width="match_parent"
  6. android:layout_height="match_parent"
  7. tools:context=".Main" >
  8.  
  9. <LinearLayout
  10. android:layout_width="match_parent"
  11. android:layout_height="match_parent"
  12. android:orientation="vertical" >
  13.  
  14. <TabWidget
  15. android:id="@android:id/tabs"
  16. android:layout_width="match_parent"
  17. android:layout_height="wrap_content" >
  18. </TabWidget>
  19.  
  20. <FrameLayout
  21. android:id="@android:id/tabcontent"
  22. android:layout_width="match_parent"
  23. android:layout_height="wrap_content" >
  24.  
  25. <LinearLayout
  26. android:id="@+id/tab1"
  27. android:layout_width="match_parent"
  28. android:layout_height="wrap_content"
  29. android:orientation="vertical" >
  30.  
  31. <TextView
  32. android:layout_width="match_parent"
  33. android:layout_height="match_parent"
  34. android:text="110" />
  35. </LinearLayout>
  36.  
  37. <LinearLayout
  38. android:id="@+id/tab2"
  39. android:layout_width="match_parent"
  40. android:layout_height="wrap_content"
  41. android:orientation="vertical" >
  42.  
  43. <TextView
  44. android:layout_width="match_parent"
  45. android:layout_height="match_parent"
  46. android:text="220" />
  47. </LinearLayout>
  48.  
  49. <LinearLayout
  50. android:id="@+id/tab3"
  51. android:layout_width="match_parent"
  52. android:layout_height="wrap_content"
  53. android:orientation="vertical" >
  54.  
  55. <TextView
  56. android:layout_width="match_parent"
  57. android:layout_height="match_parent"
  58. android:text="330" />
  59. </LinearLayout>
  60. </FrameLayout>
  61. </LinearLayout>
  62.  
  63. </TabHost>
  64.  
  65. 代码实现==》
  66. package com.example.mytabhost;
  67.  
  68. import android.annotation.SuppressLint;
  69. import android.app.TabActivity;
  70. import android.os.Bundle;
  71. import android.view.LayoutInflater;
  72. import android.view.Menu;
  73. import android.widget.TabHost;
  74. import android.widget.TabHost.OnTabChangeListener;
  75. import android.widget.TabHost.TabSpec;
  76. import android.widget.Toast;
  77.  
  78. @SuppressLint("ShowToast")
  79. @SuppressWarnings("deprecation")
  80. public class MainActivity extends TabActivity
  81. {
  82. @Override
  83. protected void onCreate(Bundle savedInstanceState)
  84. {
  85. super.onCreate(savedInstanceState);
  86. setContentView(R.layout.activity_main);
  87.  
  88. final TabHost tabHost = this.getTabHost();
  89.  
  90. TabSpec tab1 = tabHost.newTabSpec("tab1").setIndicator("tab1").setContent(R.id.tab1);
  91. tabHost.addTab(tab1);
  92. // 以上代码等价于
  93. tabHost.addTab(tabHost.newTabSpec("tab2").setIndicator("tab2").setContent(R.id.tab2));
  94. tabHost.addTab(tabHost.newTabSpec("tab3").setIndicator("tab3").setContent(R.id.tab3));
  95.  
  96. tabHost.setOnTabChangedListener(new OnTabChangeListener()
  97. {
  98. @Override
  99. public void onTabChanged(String tabId)
  100. {
  101. if (tabId.equals("tab1"))
  102. { // 第一个标签
  103. Toast.makeText(MainActivity.this, "选择了001", 3000).show();
  104. }
  105. if (tabId.equals("tab2"))
  106. { // 第二个标签
  107. Toast.makeText(MainActivity.this, "选择了002", 3000).show();
  108. }
  109. if (tabId.equals("tab3"))
  110. { // 第三个标签
  111. Toast.makeText(MainActivity.this, "选择了003", 3000).show();
  112. }
  113. }
  114. });
  115. }
  116.  
  117. @Override
  118. public boolean onCreateOptionsMenu(Menu menu)
  119. {
  120. getMenuInflater().inflate(R.menu.main, menu);
  121. return true;
  122. }
  123.  
  124. }

实现效果如下图:

android学习笔记十——TabHost的更多相关文章

  1. Android学习笔记:TabHost 和 FragmentTabHost(转)

    转自:http://www.cnblogs.com/asion/p/3339313.html   作者:Asion Tang   出处:http://asiontang.cnblogs.com   T ...

  2. Android学习笔记:TabHost 和 FragmentTabHost

    TabHost 命名空间: android.widget.TabHost 初始化函数(必须在addTab之前调用): setup(); 包含两个子元素: 1.Tab标签容器TabWidget(@and ...

  3. [转]Android学习笔记:TabHost 和 FragmentTabHost

    TabHost 命名空间: android.widget.TabHost 初始化函数(必须在addTab之前调用): setup(); 包含两个子元素: 1.Tab标签容器TabWidget(@and ...

  4. Android学习笔记十:异步处理

    转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/7520700.html 一:基础概念 UI线程:当Android程序第一次启动时,Android会同时启动一条主 ...

  5. 【转】Pro Android学习笔记(三十):Menu(1):了解Menu

    目录(?)[-] 创建Menu MenuItem的属性itemId MenuItem的属性groupId MenuItem的属性orderId MenuItem的属性可选属性 Menu触发 onOpt ...

  6. 【转】 Pro Android学习笔记(二十):用户界面和控制(8):GridView和Spinner

    目录(?)[-] GridView Spinner GridView GridView是网格状布局,如图所示.在了解ListView后,很容易了解GridView.下面是例子的XML文件. <? ...

  7. 【转】 Pro Android学习笔记(十九):用户界面和控制(7):ListView

    目录(?)[-] 点击List的item触发 添加其他控件以及获取item数据 ListView控件以垂直布局方式显示子view.系统的android.app.ListActivity已经实现了一个只 ...

  8. 【转】 Pro Android学习笔记(七十):HTTP服务(4):SOAP/JSON/XML、异常

    目录(?)[-] SOAP JSON和XMLPullParser Exception处理 文章转载只能用于非商业性质,且不能带有虚拟货币.积分.注册等附加条件,转载须注明出处:http://blog. ...

  9. 【转】 Pro Android学习笔记(四十):Fragment(5):适应不同屏幕或排版

    目录(?)[-] 设置横排和竖排的不同排版风格 改写代码 对于fragment,经常涉及不同屏幕尺寸和不同的排版风格.我们在基础小例子上做一下改动,在横排的时候,仍是现实左右两个fragment,在竖 ...

随机推荐

  1. 能不能对metronic继续封装一下呢

    按照这篇文章的说法,目前metronic的层级还是较低的,只是针对Bootstrap做了很多的用例(最佳实践). 我上一个项目是用easy UI,准确地说,是经过简单封装的easy UI.用起来非常爽 ...

  2. [POJ] 3277 .City Horizon(离散+线段树)

    来自这两篇博客的总结 http://blog.csdn.net/SunnyYoona/article/details/43938355 http://m.blog.csdn.net/blog/mr_z ...

  3. windows Batch 脚本的一些常用有效

    也是非常的有用的.比如要想要删除目录下的同一文件名的东西. del /S filename 就可以连同子目录下的同文件名一起删除 . 再比如你想要COPY 文件到子目录下的时候. for /D %%i ...

  4. jq 全选/取消效果

    //全选框$('#btnbutton').live('click',function(){ var data = $(this).attr('data'); if(data=='on'){ $(&qu ...

  5. Codeforces Round #143 (Div. 2)

    A. Team 模拟. B. Magic, Wizardry and Wonders 可以发现\[d=a_1-a_2+a_3-a_4+\cdots\] 那么有\(odd=\lfloor \frac{n ...

  6. kuangbin_MST A (POJ 1251)

    模板题 Kruskal直接过 调试时候居然在sort(edge + 1, edge + 1 + m)上浪费好多时间... 不过本着ACMer的心态自然要测试一下两种方法分别的速度 Kruskal : ...

  7. JQ插件jquery.fn.extend与jquery.extend

    jQuery为开发插件提拱了两个方法,分别是: JavaScript代码 jQuery.fn.extend(object); jQuery.extend(object); jQuery.extend( ...

  8. Sklearn库例子4:分类——Lasso分类例子

    Lasso回归: #-*- encoding:utf-8 -*- import numpy as np import matplotlib.pyplot as plt from sklearn.met ...

  9. easyui datagrid使用(好)

    加载相关js和css,因为easyui依赖jquery,所有加载easyui前要先加载jquery,否则为提示找不到datagrid <!-- 加载jquery --> <scrip ...

  10. [IoC]6 详解@Autowired、@Qualifier和@Required

    A.@Autowired org.springframework.beans.factory.annotation.Autowired public @interface Autowired Mark ...