小伙伴们在手机上逛淘宝的时候,会发现在淘宝的下面有个按钮,分别是首页、微淘、社区、购物车和我的淘宝,点击不同的按钮会跳转到不同的页面,目前小编所接手的这个项目,也需要用到类似这样的功能,小编就发挥网络的强大力量,原来人家使用的技术叫做Tabhost,用Tabhost来控制各个选项卡的切换,Tabhost的实现分为两种,一种是继承自TabActivity,继承TabActivity,从TabActivity中用getTabHost()方法获取TabHost。只要定义具体Tab内容布局就行了。另一种是不继承TabActivity,在布局文件中定义TabHost即可,但是TabWidget的id必须是 @android:id/tabs,FrameLayout的id必须是@android:id/tabcontent,TabHost的id可以自定义。今天这篇博文,小编就来简单的介绍一下有关于Tabhost的故事,还请小伙伴多多指教哦`(*∩_∩*)′!

首先,我们来看第一种实现方式,继承自TabActivity,首先我们来看xml的布局代码,具体代码如下所示:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:layout_width="fill_parent"
  4. android:layout_height="fill_parent">
  5.  
  6. <!-- 第一个布局 -->
  7. <LinearLayout
  8. android:id="@+id/view_one"
  9. android:layout_width="match_parent"
  10. android:layout_height="match_parent" >
  11. <TextView
  12. android:id="@+id/textView_one"
  13. android:layout_width="wrap_content"
  14. android:layout_height="wrap_content"
  15. android:text="等一个故事" />
  16. </LinearLayout>
  17.  
  18. <!-- 第二个布局 -->
  19. <LinearLayout
  20. android:id="@+id/view_two"
  21. android:layout_width="match_parent"
  22. android:layout_height="match_parent" >
  23.  
  24. <TextView
  25. android:id="@+id/textView_two"
  26. android:layout_width="wrap_content"
  27. android:layout_height="wrap_content"
  28. android:text="当幸福来敲门" />
  29. </LinearLayout>
  30.  
  31. <!-- 第三个布局 -->
  32. <LinearLayout
  33. android:id="@+id/view_three"
  34. android:layout_width="match_parent"
  35. android:layout_height="match_parent" >
  36.  
  37. <TextView
  38. android:id="@+id/textView_three"
  39. android:layout_width="wrap_content"
  40. android:layout_height="wrap_content"
  41. android:text="微笑闪亮未来" />
  42. </LinearLayout>
  43.  
  44. </FrameLayout>

接着,我们来看java类中的代码,具体代码如下所示:

  1. package com.example.tabhost_trynew;
  2.  
  3. import com.example.tabhost_trynew.R;
  4.  
  5. import android.app.TabActivity;
  6. import android.os.Bundle;
  7. import android.view.LayoutInflater;
  8. import android.view.Menu;
  9. import android.widget.TabHost;
  10. import android.widget.TabHost.OnTabChangeListener;
  11.  
  12. public class MainActivity extends TabActivity{
  13.  
  14. @Override
  15. protected void onCreate(Bundle savedInstanceState) {
  16. super.onCreate(savedInstanceState);
  17. setTitle("TabDemoActivity");
  18. TabHost tabHost = getTabHost();
  19. LayoutInflater.from(this).inflate(R.layout.activity_main,
  20. tabHost.getTabContentView(), true);
  21. tabHost.addTab(tabHost.newTabSpec("tab_one").setIndicator("tab_one", getResources().getDrawable(R.drawable.flower))
  22. .setContent(R.id.view_one));
  23. tabHost.addTab(tabHost.newTabSpec("tab_two").setIndicator("tab_two", getResources().getDrawable(R.drawable.flower))
  24. .setContent(R.id.view_two));
  25. tabHost.addTab(tabHost.newTabSpec("tab_three").setIndicator("tab_three", getResources().getDrawable(R.drawable.flower))
  26. .setContent(R.id.view_three));
  27.  
  28. //标签切换事件处理,setOnTabChangedListener
  29. tabHost.setOnTabChangedListener(new OnTabChangeListener(){
  30. @Override
  31. public void onTabChanged(String tabId) {
  32. if (tabId.equals("tab_one")) { //第一个标签
  33. }
  34. if (tabId.equals("tab_two")) { //第二个标签
  35. }
  36. if (tabId.equals("tab_three")) { //第三个标签
  37. }
  38. }
  39. });
  40.  
  41. }
  42.  
  43. @Override
  44. public boolean onCreateOptionsMenu(Menu menu) {
  45.  
  46. getMenuInflater().inflate(R.menu.main, menu);
  47. return true;
  48. }
  49.  
  50. }

我们来看一下运行效果,如下图所示:

接着,我们来看第二种实现方式,不继承自TabActivity,首先,我们来看xml的布局代码,具体代码如下所示:

  1. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  2. xmlns:tools="http://schemas.android.com/tools"
  3. android:layout_width="match_parent"
  4. android:layout_height="match_parent"
  5. android:orientation="vertical"
  6. tools:context=".MainActivity" >
  7.  
  8. <TabHost
  9. android:id="@+id/tabhost"
  10. android:layout_width="match_parent"
  11. android:layout_height="wrap_content">
  12.  
  13. <LinearLayout
  14. android:layout_width="match_parent"
  15. android:layout_height="match_parent"
  16. android:orientation="vertical" >
  17.  
  18. <TabWidget
  19. android:id="@android:id/tabs"
  20. android:layout_width="match_parent"
  21. android:layout_height="wrap_content" >
  22. </TabWidget>
  23.  
  24. <FrameLayout
  25. android:id="@android:id/tabcontent"
  26. android:layout_width="match_parent"
  27. android:layout_height="match_parent" >
  28.  
  29. <!-- 第一个tab的布局 -->
  30. <LinearLayout
  31. android:id="@+id/tab1"
  32. android:layout_width="match_parent"
  33. android:layout_height="match_parent" >
  34.  
  35. <TextView
  36. android:id="@+id/textView1"
  37. android:layout_width="wrap_content"
  38. android:layout_height="wrap_content"
  39. android:text="等一个故事" />
  40.  
  41. </LinearLayout>
  42.  
  43. <!-- 第二个tab的布局 -->
  44. <LinearLayout
  45. android:id="@+id/tab2"
  46. android:layout_width="match_parent"
  47. android:layout_height="match_parent" >
  48.  
  49. <TextView
  50. android:id="@+id/textView2"
  51. android:layout_width="wrap_content"
  52. android:layout_height="wrap_content"
  53. android:text="当幸福来敲门" />
  54.  
  55. </LinearLayout>
  56.  
  57. <!-- 第三个tab的布局 -->
  58. <LinearLayout
  59. android:id="@+id/tab3"
  60. android:layout_width="match_parent"
  61. android:layout_height="match_parent" >
  62.  
  63. <TextView
  64. android:id="@+id/textView3"
  65. android:layout_width="wrap_content"
  66. android:layout_height="wrap_content"
  67. android:text="微笑闪亮未来" />
  68.  
  69. </LinearLayout>
  70. </FrameLayout>
  71. </LinearLayout>
  72. </TabHost>
  73.  
  74. </LinearLayout>

接着,我们来看java类中的代码,代码如下所示:

  1. package com.example.tabhost_try2;
  2.  
  3. import android.os.Bundle;
  4. import android.app.Activity;
  5. import android.view.Menu;
  6. import android.widget.TabHost;
  7.  
  8. public class MainActivity extends Activity {
  9.  
  10. @Override
  11. protected void onCreate(Bundle savedInstanceState) {
  12. super.onCreate(savedInstanceState);
  13. setContentView(R.layout.activity_main);
  14.  
  15. //初始化TabHost容器
  16. TabHost th=(TabHost)findViewById(R.id.tabhost);
  17. th.setup();
  18.  
  19. //在TabHost创建标签,然后设置:标题/图标/标签页布局
  20. th.addTab(th.newTabSpec("tab1").setIndicator("tab_one",getResources().getDrawable(R.drawable.flower)).setContent(R.id.tab1));
  21. th.addTab(th.newTabSpec("tab2").setIndicator("tab_two",getResources().getDrawable(R.drawable.flower)).setContent(R.id.tab2));
  22. th.addTab(th.newTabSpec("tab3").setIndicator("tab_three",getResources().getDrawable(R.drawable.flower)).setContent(R.id.tab3));
  23.  
  24. //上面的null可以为getResources().getDrawable(R.drawable.图片名)设置图标
  25.  
  26. }
  27.  
  28. @Override
  29. public boolean onCreateOptionsMenu(Menu menu) {
  30. // Inflate the menu; this adds items to the action bar if it is present.
  31. getMenuInflater().inflate(R.menu.main, menu);
  32. return true;
  33. }
  34.  
  35. }

我们来看一下运行效果,如下所示:

小编寄语:该博客小编主要简单的介绍了Tabhost的相关知识,一个是不继承TabActivity,一个是继承自TabActivity;还是那句话对于小编来说,既是挑战更是机遇,因为知识都是相通的,再者来说,在小编的程序人生中,留下最珍贵的记忆,虽然以后小编不一定从事安卓这个行业,代码世界里,很多种事,有的甜蜜,有的温馨,有的婉转成歌,有的绵延不息,在这些故事里,我们唯一的共通之处就是,某年,某月,某个波澜不惊的日子里,曾经很爱很爱你!爱你--这段接触Android日子里,安卓带给小编的种种的惊喜。

深入浅出Tabhost+简单入门Demo的更多相关文章

  1. Quartz学习——Quartz简单入门Demo(二)

    要学习Quartz框架,首先大概了解了Quartz的基本知识后,在通过简单的例子入门,一步一个脚印的走下去. 下面介绍Quartz入门的示例,由于Quartz的存储方式分为RAM和JDBC,分别对这两 ...

  2. gflag的简单入门demo

    gflags 一. 下载与安装 这里直接使用包管理器安装: sudo apt install libgflags-dev 二. gflags的简单使用 1. 定义需要的类型 格式: DEFINE_类型 ...

  3. ECharts简单入门demo

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  4. Dubbo入门—搭建一个最简单的Demo框架

    一.Dubbo背景和简介 1.电商系统的演进 Dubbo开始于电商系统,因此在这里先从电商系统的演变讲起. a.单一应用框架(ORM) 当网站流量很小时,只需一个应用,将所有功能如下单支付等都部署在一 ...

  5. Dubbo入门---搭建一个最简单的Demo框架(转)

    Dubbo背景和简介 Dubbo开始于电商系统,因此在这里先从电商系统的演变讲起. 单一应用框架(ORM) 当网站流量很小时,只需一个应用,将所有功能如下单支付等都部署在一起,以减少部署节点和成本.  ...

  6. C#中缓存的使用 ajax请求基于restFul的WebApi(post、get、delete、put) 让 .NET 更方便的导入导出 Excel .net core api +swagger(一个简单的入门demo 使用codefirst+mysql) C# 位运算详解 c# 交错数组 c# 数组协变 C# 添加Excel表单控件(Form Controls) C#串口通信程序

    C#中缓存的使用   缓存的概念及优缺点在这里就不多做介绍,主要介绍一下使用的方法. 1.在ASP.NET中页面缓存的使用方法简单,只需要在aspx页的顶部加上一句声明即可:  <%@ Outp ...

  7. Dubbo入门介绍---搭建一个最简单的Demo框架

    Dubbo入门---搭建一个最简单的Demo框架 置顶 2017年04月17日 19:10:44 是Guava不是瓜娃 阅读数:320947 标签: dubbozookeeper 更多 个人分类: D ...

  8. Maven+SpringMVC+Dubbo 简单的入门demo配置

    转载自:https://cloud.tencent.com/developer/article/1010636 之前一直听说dubbo,是一个很厉害的分布式服务框架,而且巴巴将其开源,这对于咱们广大程 ...

  9. Okio 1.9简单入门

    Okio 1.9简单入门 Okio库是由square公司开发的,补充了java.io和java.nio的不足,更加方便,快速的访问.存储和处理你的数据.而OkHttp的底层也使用该库作为支持. 该库极 ...

随机推荐

  1. ●BZOJ 4516 [Sdoi2016]生成魔咒

    题链: http://www.lydsy.com/JudgeOnline/problem.php?id=4516 题解: 把串反过来后,问题变为求每个后缀的互不相同的子串个数.首先用倍增算法求出 sa ...

  2. [BZOJ]1085 骑士精神(SCOI2005)

    这种鲜明的玄学风格很明显就是十几年前的题目. Description 在一个5×5的棋盘上有12个白色的骑士和12个黑色的骑士, 且有一个空位.在任何时候一个骑士都能按照骑士的走法(它可以走到和它横坐 ...

  3. bzoj2006 NOI2010 数据结构+堆维护区间和最大

    2006: [NOI2010]超级钢琴 Time Limit: 20 Sec  Memory Limit: 552 MBSubmit: 3431  Solved: 1686[Submit][Statu ...

  4. Python3 运算符

    装载自:https://www.cnblogs.com/cisum/p/8064222.html Python3 运算符 什么是运算符? 本章节主要说明Python的运算符.举个简单的例子 4 +5 ...

  5. 解决nodejs中json序列化时Date类型为UTC格式

    在nodejs中,json序列化时Date类型时,默认转为UTC格式. 如下图 zhupengfei@DESKTOP-HJASOE3 MINGW64 /d/MyProject/exp2 $ node ...

  6. Java访问修饰符及其访问控制

    java中的访问修饰符,可以看成是人的秘密分享级别.private 个人秘密 ,protected 家族秘密,default(不写修饰符)社区(邻居)秘密(在一个包下的能访问),public 社会秘密 ...

  7. SpringMVC mock测试详解

    @RunWith(SpringRunner.class) @SpringBootTest(classes = WebmanagerApplication.class) //配置事务的回滚,对数据库的增 ...

  8. mongo数据更新(修改器)

    数据更新简单的做法是删除重新插入update()函数语法 db.集合.update(更新条件,新的对象数据(更新操作符),upsert,multi)upsert如果要更新的数据不存在,则增加一条新的内 ...

  9. 地址下拉框,需要js级联js

    function area() { _url = "/ashx/DropDownControl.ashx"; _swType = "GetArea"; _z = ...

  10. c++ 文件操作详解

    C++ 通过以下几个类支持文件的输入输出: ofstream: 写操作(输出)的文件类 (由ostream引申而来) ifstream: 读操作(输入)的文件类(由istream引申而来) fstre ...