链接地址:http://www.cnblogs.com/lknlfy/archive/2012/02/18/2357093.html

一、概述

TabHost是一种用来显示标签的组件,不清楚?看一下来电通这个应用就知道了。这个组件用起来与其他组件不太一样,它需要继承TabActivity这个类,还有它的布局文件与我们平时用的也有些不一样。

二、要求

实现一个具有三个标签的选项卡,每个标签使用不同的布局作为内容,当切换不同的标签时向用户发出提示。

三、实现

     声明:这个应用需要用到前面一篇(基础篇(3)的相关内容)。

新建工程MyUI(这个名字随便取),修改/res/layout/main.xml文件,添加3个LinearLayout作为3个标签的布局。

完整的main.xml文件如下,注意第2行不再是使用LinearLayout,而是使用TabHost。

 1 <?xml version="1.0" encoding="utf-8"?> 2 <TabHost xmlns:android="http://schemas.android.com/apk/res/android" 3     android:id="@android:id/tabhost" 4     android:layout_width="fill_parent" 5     android:layout_height="fill_parent"> 6  7     <LinearLayout 8         android:id="@+id/tab1" 9         android:orientation="vertical"10         android:layout_width="fill_parent"11         android:layout_height="fill_parent">12 13         <ListView14             android:id="@+id/list1"15             android:layout_width="fill_parent"16             android:layout_height="wrap_content"17             >18 19         </ListView>20     </LinearLayout>21 22     <LinearLayout23         android:orientation="vertical"24         android:layout_width="fill_parent"25         android:layout_height="fill_parent"26         >27 28     </LinearLayout>29 30     <LinearLayout31         android:id="@+id/tab2"32         android:orientation="vertical"33         android:layout_width="fill_parent"34         android:layout_height="fill_parent">35 36         <TextView37             android:id="@+id/other"38             android:layout_width="fill_parent"39             android:layout_height="wrap_content"40             android:text="这是一个选项卡应用"41             android:textSize="20px"42             android:textColor="#FF0000"43             android:gravity="center_horizontal"44             />45 46     </LinearLayout>47 48 </TabHost>

接着新建一个Adapter1.java文件,编写一个继承BaseAdapter的Adapter1类,比较简单,可以参看基础篇(3)的相关内容,完整的Adapter1.java文件如下:

 1 package com.nan.ui; 2  3 import android.content.Context; 4 import android.graphics.Color; 5 import android.view.LayoutInflater; 6 import android.view.View; 7 import android.view.ViewGroup; 8 import android.widget.BaseAdapter; 9 import android.widget.TextView;10 11 12 public class Adapter1 extends BaseAdapter13 {14     private Context mContext;15     private int num;16 17     Adapter1(Context c , int n)18     {19         mContext = c;20         num = n;21     }22 23     @Override24     public int getCount()25     {26         // TODO Auto-generated method stub27         return num;28     }29 30     @Override31     public Object getItem(int arg0)32     {33         // TODO Auto-generated method stub34         return arg0;35     }36 37     @Override38     public long getItemId(int arg0)39     {40         // TODO Auto-generated method stub41         return arg0;42     }43 44     @Override45     public View getView(int arg0, View arg1, ViewGroup arg2)46     {47         // TODO Auto-generated method stub48 49         arg1 = LayoutInflater.from(mContext).inflate(R.layout.tab1, null);50         TextView t1 = (TextView)arg1.findViewById(R.id.name);51         t1.setText("李小明");52         t1.setTextColor(Color.BLUE);53         TextView t2 = (TextView)arg1.findViewById(R.id.num);54         t2.setText("13709394939");55 56         return arg1;57     }58 59 }

我们看到上面的第49行代码中使用了tab1.xml布局文件,因此新建一个tab1.xml文件,在里面添加2个TextView,如下:

 1 <?xml version="1.0" encoding="utf-8"?> 2  3 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 4     android:layout_width="fill_parent" 5     android:layout_height="fill_parent" 6     android:orientation="vertical" 7 > 8  9     <TextView10         android:id="@+id/name"11         android:layout_width="wrap_content"12         android:layout_height="wrap_content"13         />14 15     <TextView16         android:id="@+id/num"17         android:layout_width="wrap_content"18         android:layout_height="wrap_content"19         />20 21 </LinearLayout>

继续创建一个Activity1.java文件,里面的内容就是我们平时用到的最基本的东西,不解析,内容如下:

 1 package com.nan.ui; 2  3 import android.app.Activity; 4 import android.os.Bundle; 5  6  7 public class Activity1 extends Activity 8 { 9 10     /** Called when the activity is first created. */11     @Override12     public void onCreate(Bundle savedInstanceState)13     {14         super.onCreate(savedInstanceState);15         setContentView(R.layout.activity1);16 17     }18 19 }

为上面这个文件创建一个名为activity1.xml布局文件,里面就只有1个TextView,如下:

 1 <?xml version="1.0" encoding="utf-8"?> 2  3 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 4     android:layout_width="fill_parent" 5     android:layout_height="fill_parent" 6     android:orientation="vertical" 7 > 8  9     <TextView10         android:id="@+id/mtextview"11         android:layout_width="fill_parent"12         android:layout_height="wrap_content"13         android:text="这是一个Activity"14         android:textSize="20px"15         android:gravity="center_horizontal"16         android:textColor="#0000FF"17         />18 19 </LinearLayout>

还没完,最后就是这篇文章的重头戏了----MyUIActivity.java文件。该文件里面的MyUIActivity类继承TabActivity类,

首先实例化TabHost对象,接着使用main.xml作为布局文件,为3个标签设置要显示的内容,最后是设置标签切换动作的监听,用DisplayToast()函数来显示当前切换到的是第几个标签。有详细注释,请看如下完整的代码:

 1 package com.nan.ui; 2  3  4 import android.app.TabActivity; 5 import android.content.Intent; 6 import android.os.Bundle; 7 import android.view.LayoutInflater; 8 import android.widget.ListView; 9 import android.widget.TabHost;10 import android.widget.Toast;11 import android.widget.TabHost.OnTabChangeListener;12 13 14 public class MyUIActivity extends TabActivity15 {16     //声明TabHost对象17     private TabHost mTabHost;18 19     private Adapter1 ad1;20     private ListView ListView1;21     private Intent mIntent;22 23     /** Called when the activity is first created. */24     @Override25     public void onCreate(Bundle savedInstanceState)26     {27         super.onCreate(savedInstanceState);28         //setContentView(R.layout.main);29 30         //设置ListView中显示4行内容31         ad1 = new Adapter1(MyUIActivity.this,4);32 33         mIntent = new Intent();34         //设置要启动的Activity35         mIntent.setClass(MyUIActivity.this, Activity1.class);36 37         //取得TabHost对象38         mTabHost = getTabHost();39         //使用TabHost布局40         LayoutInflater.from(this).inflate(R.layout.main, mTabHost.getTabContentView(), true);41         //设置第一个标签的内容(使用ListView作为内容)42         mTabHost.addTab(mTabHost.newTabSpec("1").setIndicator("列表", null).setContent(R.id.tab1));43         //设置第二个标签的内容(使用Activity作为内容)44         mTabHost.addTab(mTabHost.newTabSpec("2").setIndicator("页面", null).setContent(mIntent));45         //设置第三个标签的内容(使用简单的线性布局作为内容)46         mTabHost.addTab(mTabHost.newTabSpec("3").setIndicator("其他", null).setContent(R.id.tab2));47 48         ListView1 = (ListView)mTabHost.findViewById(R.id.list1);49         //设置ListView要显示的内容50         ListView1.setAdapter(ad1);51 52         //标签切换事件处理53         mTabHost.setOnTabChangedListener(new OnTabChangeListener()54         {55             // TODO Auto-generated method stub56             @Override57             public void onTabChanged(String tabId)58             {59                 //自己添加处理事件60                 if(tabId=="1")61                 {62                     DisplayToast("Tab1");63                 }64                 else if(tabId=="2")65                 {66                     DisplayToast("Tab2");67                 }68                 else69                 {70                     DisplayToast("Tab3");71                 }72             }73         });74     }75 76     private void DisplayToast(String s)77     {78         Toast.makeText(MyUIActivity.this, s, Toast.LENGTH_SHORT).show();79     }80 81 }

最后,在AndroidManifest.xml文件下声明多一个activity,如下:

1 <activity2 android:name=".Activity1"3     >4 </activity>

好了,运行该程序,一开始的界面如下:

切换到第二个选项卡,如下:

切换到第三个选项卡,如下:

OK,完成。

转载于:https://www.cnblogs.com/wvqusrtg/p/5179018.html

Android应用开发基础篇(4)-----TabHost(选项卡)相关推荐

  1. Android App开发基础篇—数据存储(SQLite数据库)

    Android App开发基础篇-数据存储(SQLite数据库) 前言:Android中提供了对SQLite数据库的支持.开发人员可以在应用中创建和操作自己的数据库来存储数据,并对数据进行操作. 一. ...

  2. Android应用开发基础篇(12)-----Socket通信(转载)

    转自:http://www.devdiv.com/android_socket_-blog-258060-10594.html 一.概述 网络通信无论在手机还是其他设备上都应用得非常广泛,因此掌握网络 ...

  3. Android应用开发基础篇(1)-----Button

    链接地址:http://www.cnblogs.com/lknlfy/archive/2012/02/14/2351740.html 一.概述        Button,顾名思义就是按钮的意思,它主 ...

  4. Android应用开发基础篇(9)-----SharedPreferences

    链接地址:http://www.cnblogs.com/lknlfy/archive/2012/02/27/2370319.html 一.概述 对于SharedPreferences,我吧它理解为一种 ...

  5. Android NFC开发-理论篇

    Android NFC开发-理论篇 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/CSDN_GYG/article/details/72884849 ...

  6. Android App开发基础

    Android App开发基础 App的开发特点 (1)App的运行环境 1.使用数据线把手机连到电脑上 2.在电脑上安装手机的驱动程序 3.打开手机的开发者选项并启用USB调试 4.将连接的手机设为 ...

  7. Cocos2d-Lua手游开发基础篇-何韬-专题视频课程

    Cocos2d-Lua手游开发基础篇-62875人已学习 课程介绍         Cocos2d-Lua是一个开源的移动游戏框架,可以轻松运行在iOS.Android.Blackberry等操作系统 ...

  8. android界面数据存储,Android应用开发基础之数据存储和界面展现(二)

    Android应用开发基础之数据存储和界面展现(二) 常见布局 相对布局 RelativeLayout 组件默认左对齐.顶部对齐 设置组件在指定组件的右边 android:layout_toRight ...

  9. 一步一步教你使用AgileEAS.NET基础类库进行应用开发-基础篇-通过SQL实现特殊业务...

    前面的四篇文章演示ORM的一些常规操作与配置,通过前面的文章,应用开发人员要可以使用ORM开发出简单的应用,但是,ORM也不是万能钥匙,在业务应用中,还有很多是ORM解决不了的问题,对于这些问题,我们 ...

最新文章

  1. leetcode-86 分隔链表
  2. 利用802.11x协议实现动态vlan的划分
  3. vc++修改软件程序菜单实例
  4. 5.4 matllab数据插值案例(机动车刹车距离问题、)
  5. 小白的markdown基础语法总结
  6. C语言程序设计及上机指导,《C语言程序设计上机指导》全套教案
  7. 3月任务--target
  8. 飞鸽改变您的互联网生活
  9. python f string slash_python-django中的APPEND_SLASH实现
  10. 如何成为一名优秀的web前端工程师(前端攻城师)
  11. 30 位互联网大佬,当年上了什么大学?
  12. Essential Booklist of .Net Framework
  13. 尚硅谷大数据项目之Flink实时数仓-踩坑记录和笔记记录
  14. cmpp具体java实例_cmpp3.0_JAVA_实现 - 源码下载|Windows编程|源代码 - 源码中国
  15. java 调用三角函数_Java中的三角函数方法
  16. 国内外RTI产品调查情况
  17. RFID信息系统数据安全对策分析
  18. 抖音、猫眼网页信息加密分析与应对(1)
  19. 大数据时代隐私泄露呈高发趋势 如何有效预防成关键
  20. Arduino控制TM1637共阳四位数码管

热门文章

  1. 手把手教你怎么批量查询中通快递单号
  2. 1.4 SIG MESH协议各个层的作用
  3. Haffman编码(算法导论)
  4. 邮件服务器从0到100
  5. delphi 10.3 自动安装 适配Android 6.0、7.0、8.0、9.0
  6. 幼儿园语言活动包括哪几类_语段从语言三个方面-幼儿园语言教育的内容包含哪些请从三方面进行回答?幼儿园语言教育的 爱问知识人...
  7. 车路协同与高精度地图
  8. STM32硬件SPI使用与nSS的理解
  9. Linux系统使用steamplay完美运行巫师之昆特牌:王权的陨落(Thronebreaker:The Witcher Tales)
  10. 僵尸入侵游戏主体部分2--循环和game对象