Android应用开发基础篇(4)-----TabHost(选项卡)
链接地址: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。
![](/assets/blank.gif)
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>
![](/assets/blank.gif)
接着新建一个Adapter1.java文件,编写一个继承BaseAdapter的Adapter1类,比较简单,可以参看基础篇(3)的相关内容,完整的Adapter1.java文件如下:
![](/assets/blank.gif)
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 }
![](/assets/blank.gif)
我们看到上面的第49行代码中使用了tab1.xml布局文件,因此新建一个tab1.xml文件,在里面添加2个TextView,如下:
![](/assets/blank.gif)
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>
![](/assets/blank.gif)
继续创建一个Activity1.java文件,里面的内容就是我们平时用到的最基本的东西,不解析,内容如下:
![](/assets/blank.gif)
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 }
![](/assets/blank.gif)
为上面这个文件创建一个名为activity1.xml布局文件,里面就只有1个TextView,如下:
![](/assets/blank.gif)
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>
![](/assets/blank.gif)
还没完,最后就是这篇文章的重头戏了----MyUIActivity.java文件。该文件里面的MyUIActivity类继承TabActivity类,
首先实例化TabHost对象,接着使用main.xml作为布局文件,为3个标签设置要显示的内容,最后是设置标签切换动作的监听,用DisplayToast()函数来显示当前切换到的是第几个标签。有详细注释,请看如下完整的代码:
![](/assets/blank.gif)
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 }
![](/assets/blank.gif)
最后,在AndroidManifest.xml文件下声明多一个activity,如下:
1 <activity2 android:name=".Activity1"3 >4 </activity>
好了,运行该程序,一开始的界面如下:
切换到第二个选项卡,如下:
切换到第三个选项卡,如下:
OK,完成。
转载于:https://www.cnblogs.com/wvqusrtg/p/5179018.html
Android应用开发基础篇(4)-----TabHost(选项卡)相关推荐
- Android App开发基础篇—数据存储(SQLite数据库)
Android App开发基础篇-数据存储(SQLite数据库) 前言:Android中提供了对SQLite数据库的支持.开发人员可以在应用中创建和操作自己的数据库来存储数据,并对数据进行操作. 一. ...
- Android应用开发基础篇(12)-----Socket通信(转载)
转自:http://www.devdiv.com/android_socket_-blog-258060-10594.html 一.概述 网络通信无论在手机还是其他设备上都应用得非常广泛,因此掌握网络 ...
- Android应用开发基础篇(1)-----Button
链接地址:http://www.cnblogs.com/lknlfy/archive/2012/02/14/2351740.html 一.概述 Button,顾名思义就是按钮的意思,它主 ...
- Android应用开发基础篇(9)-----SharedPreferences
链接地址:http://www.cnblogs.com/lknlfy/archive/2012/02/27/2370319.html 一.概述 对于SharedPreferences,我吧它理解为一种 ...
- Android NFC开发-理论篇
Android NFC开发-理论篇 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/CSDN_GYG/article/details/72884849 ...
- Android App开发基础
Android App开发基础 App的开发特点 (1)App的运行环境 1.使用数据线把手机连到电脑上 2.在电脑上安装手机的驱动程序 3.打开手机的开发者选项并启用USB调试 4.将连接的手机设为 ...
- Cocos2d-Lua手游开发基础篇-何韬-专题视频课程
Cocos2d-Lua手游开发基础篇-62875人已学习 课程介绍 Cocos2d-Lua是一个开源的移动游戏框架,可以轻松运行在iOS.Android.Blackberry等操作系统 ...
- android界面数据存储,Android应用开发基础之数据存储和界面展现(二)
Android应用开发基础之数据存储和界面展现(二) 常见布局 相对布局 RelativeLayout 组件默认左对齐.顶部对齐 设置组件在指定组件的右边 android:layout_toRight ...
- 一步一步教你使用AgileEAS.NET基础类库进行应用开发-基础篇-通过SQL实现特殊业务...
前面的四篇文章演示ORM的一些常规操作与配置,通过前面的文章,应用开发人员要可以使用ORM开发出简单的应用,但是,ORM也不是万能钥匙,在业务应用中,还有很多是ORM解决不了的问题,对于这些问题,我们 ...
最新文章
- leetcode-86 分隔链表
- 利用802.11x协议实现动态vlan的划分
- vc++修改软件程序菜单实例
- 5.4 matllab数据插值案例(机动车刹车距离问题、)
- 小白的markdown基础语法总结
- C语言程序设计及上机指导,《C语言程序设计上机指导》全套教案
- 3月任务--target
- 飞鸽改变您的互联网生活
- python f string slash_python-django中的APPEND_SLASH实现
- 如何成为一名优秀的web前端工程师(前端攻城师)
- 30 位互联网大佬,当年上了什么大学?
- Essential Booklist of .Net Framework
- 尚硅谷大数据项目之Flink实时数仓-踩坑记录和笔记记录
- cmpp具体java实例_cmpp3.0_JAVA_实现 - 源码下载|Windows编程|源代码 - 源码中国
- java 调用三角函数_Java中的三角函数方法
- 国内外RTI产品调查情况
- RFID信息系统数据安全对策分析
- 抖音、猫眼网页信息加密分析与应对(1)
- 大数据时代隐私泄露呈高发趋势 如何有效预防成关键
- Arduino控制TM1637共阳四位数码管
热门文章
- 手把手教你怎么批量查询中通快递单号
- 1.4 SIG MESH协议各个层的作用
- Haffman编码(算法导论)
- 邮件服务器从0到100
- delphi 10.3 自动安装 适配Android 6.0、7.0、8.0、9.0
- 幼儿园语言活动包括哪几类_语段从语言三个方面-幼儿园语言教育的内容包含哪些请从三方面进行回答?幼儿园语言教育的 爱问知识人...
- 车路协同与高精度地图
- STM32硬件SPI使用与nSS的理解
- Linux系统使用steamplay完美运行巫师之昆特牌:王权的陨落(Thronebreaker:The Witcher Tales)
- 僵尸入侵游戏主体部分2--循环和game对象