详解Android TabHost的多种实现方法 附源码下载_Android

最近仔细研究了下TabHost,主要是为了实现微信底部导航栏的功能,最后也给出一个文章链接,大家不要着急

正文:

TabHost的实现分为两种,一个是不继承TabActivity,一个是继承自TabActivity;当然了选用继承自TabActivity的话就相对容易一些,下面来看看分别是怎样来实现的吧。

方法一、定义tabhost:不用继承TabActivity
 1、布局文件:activity_main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 xmlns:tools="http://schemas.android.com/tools"
 android:layout_width="match_parent"
 android:layout_height="match_parent"
 android:orientation="vertical"
 tools:context=".MainActivity" >
 <Button
 android:id="@+id/button1"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:text="Button" />
 <TabHost
 android:id="@+id/tabhost"
 android:layout_width="match_parent"
 android:layout_height="wrap_content"> 

 <LinearLayout
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  android:orientation="vertical" > 

  <TabWidget
  android:id="@android:id/tabs"
  android:layout_width="match_parent"
  android:layout_height="wrap_content" >
  </TabWidget> 

  <FrameLayout
  android:id="@android:id/tabcontent"
  android:layout_width="match_parent"
  android:layout_height="match_parent" > 

  <!-- 第一个tab的布局 -->
  <LinearLayout
   android:id="@+id/tab1"
   android:layout_width="match_parent"
   android:layout_height="match_parent" > 

   <TextView
   android:id="@+id/textView1"
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   android:text="林炳东" /> 

  </LinearLayout> 

  <!-- 第二个tab的布局 -->
  <LinearLayout
   android:id="@+id/tab2"
   android:layout_width="match_parent"
   android:layout_height="match_parent" > 

   <TextView
   android:id="@+id/textView2"
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   android:text="张小媛" /> 

  </LinearLayout> 

  <!-- 第三个tab的布局 -->
  <LinearLayout
   android:id="@+id/tab3"
   android:layout_width="match_parent"
   android:layout_height="match_parent" > 

   <TextView
   android:id="@+id/textView3"
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   android:text="马贝贝" /> 

  </LinearLayout>
  </FrameLayout>
 </LinearLayout>
 </TabHost> 

</LinearLayout>

2、JAVA代码

public class MainActivity extends Activity { 

 @Override
 protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.activity_main); 

 TabHost th=(TabHost)findViewById(R.id.tabhost);
 th.setup();  //初始化TabHost容器 

 //在TabHost创建标签,然后设置:标题/图标/标签页布局
 th.addTab(th.newTabSpec("tab1").setIndicator("标签1",getResources().getDrawable(R.drawable.ic_launcher)).setContent(R.id.tab1));
 th.addTab(th.newTabSpec("tab2").setIndicator("标签2",null).setContent(R.id.tab2));
 th.addTab(th.newTabSpec("tab3").setIndicator("标签3",null).setContent(R.id.tab3)); 

 //上面的null可以为getResources().getDrawable(R.drawable.图片名)设置图标 

 }
}

效果图:

此例源码地址:Demo1

方法二、Tab的内容分开:不用继承TabActivity
1、第一个tab的XML布局文件,tab1.xml:

<?xml version="1.0" encoding="UTF-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:id="@+id/LinearLayout01"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content">
 <TextView
  android:text="我是标签1的内容喔"
  android:id="@+id/TextView01"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content">
 </TextView>
 </LinearLayout>

2、第二个tab的XML布局文件,tab2.xml:

<?xml version="1.0" encoding="UTF-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:id="@+id/LinearLayout02"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"> 

 <TextView android:text="标签2"
   android:id="@+id/TextView01"
   android:layout_width="wrap_content"
   android:layout_height="wrap_content" />
</LinearLayout>

3、主布局文件,activity_main.xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:layout_width="fill_parent"
 android:layout_height="fill_parent"
 android:orientation="vertical" > 

 <TabHost
 android:id="@+id/tabhost"
 android:layout_width="match_parent"
 android:layout_height="match_parent" > 

 <LinearLayout
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  android:orientation="vertical" > 

  <TabWidget
  android:id="@android:id/tabs"
  android:layout_width="match_parent"
  android:layout_height="wrap_content" >
  </TabWidget> 

  <FrameLayout
  android:id="@android:id/tabcontent"
  android:layout_width="match_parent"
  android:layout_height="match_parent" > 

  </FrameLayout>
 </LinearLayout>
 </TabHost> 

</LinearLayout>

4、JAVA代码:

public class MainActivity extends Activity { 

 @Override
 protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.activity_main); 

 TabHost m = (TabHost)findViewById(R.id.tabhost);
 m.setup(); 

 LayoutInflater i=LayoutInflater.from(this);
 i.inflate(R.layout.tab1, m.getTabContentView());
 i.inflate(R.layout.tab2, m.getTabContentView());//动态载入XML,而不需要Activity 

 m.addTab(m.newTabSpec("tab1").setIndicator("标签1").setContent(R.id.LinearLayout01));
  m.addTab(m.newTabSpec("tab2").setIndicator("标签2").setContent(R.id.LinearLayout02)); 

 }
}

效果图:


此例源码地址:Demo2

方法三、继承自TabActivity
1、主布局文件,activity_main.xml:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:layout_width="fill_parent"
 android:layout_height="fill_parent"> 

 <!-- 第一个布局 -->
 <LinearLayout
 android:id="@+id/view1"
 android:layout_width="match_parent"
 android:layout_height="match_parent" >
 <TextView
  android:id="@+id/textView1"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:text="张小媛" />
 </LinearLayout> 

 <!-- 第二个布局 -->
 <LinearLayout
 android:id="@+id/view2"
 android:layout_width="match_parent"
 android:layout_height="match_parent" > 

 <TextView
  android:id="@+id/textView2"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:text="马贝贝" />
 </LinearLayout> 

 <!-- 第三个布局 -->
 <TextView android:id="@+id/view3"
 android:background="#00ff00"
 android:layout_width="fill_parent"
 android:layout_height="fill_parent"
 android:text="Tab3"/> 

</FrameLayout>

2、JAVA代码:
先将派生自Activity改为TabActivity,然后代码如下: 

public class MainActivity extends TabActivity { 

 @Override
 protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setTitle("TabDemoActivity");
 TabHost tabHost = getTabHost();
 LayoutInflater.from(this).inflate(R.layout.activity_main,
  tabHost.getTabContentView(), true);
 tabHost.addTab(tabHost.newTabSpec("tab1").setIndicator("tab1", getResources().getDrawable(R.drawable.ic_launcher))
  .setContent(R.id.view1));
 tabHost.addTab(tabHost.newTabSpec("tab3").setIndicator("tab2")
  .setContent(R.id.view2));
 tabHost.addTab(tabHost.newTabSpec("tab3").setIndicator("tab3")
  .setContent(R.id.view3)); 

  //标签切换事件处理,setOnTabChangedListener
 tabHost.setOnTabChangedListener(new OnTabChangeListener(){
  @Override
  public void onTabChanged(String tabId) {
  if (tabId.equals("tab1")) { //第一个标签
  }
  if (tabId.equals("tab2")) { //第二个标签
  }
  if (tabId.equals("tab3")) { //第三个标签
  }
  }
 }); 

 } 

}

效果图:

 

此例源码地址:Demo3

四、实现微信底部导航栏

效果:

 

参看:Android仿微信底部菜单栏功能显示未读消息数量

原文地址:http://blog.csdn.net/harvic880925/article/details/17120325

以上就是本文的全部内容,希望能给大家一个参考,也希望大家多多支持。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索android
tabhost
fragmenttabhost源码、tabhost用法详解、fragmenttabhost 详解、tabhost详解、tabhost实现左右滑动,以便于您获取更多的相关知识。

时间: 2024-10-21 13:43:37

详解Android TabHost的多种实现方法 附源码下载_Android的相关文章

详解Android TabHost的多种实现方法 附源码下载

最近仔细研究了下TabHost,主要是为了实现微信底部导航栏的功能,最后也给出一个文章链接,大家不要着急 正文: TabHost的实现分为两种,一个是不继承TabActivity,一个是继承自TabActivity:当然了选用继承自TabActivity的话就相对容易一些,下面来看看分别是怎样来实现的吧. 方法一.定义tabhost:不用继承TabActivity  1.布局文件:activity_main.xml <LinearLayout xmlns:android="http://s

Android仿腾讯QQ实现滑动删除 附源码下载_Android

看了很多大神们的文章,感觉受益良多,也非常欣赏大家的分享态度,所以决定开始写Blog,给大家分享自己的心得. 先看看效果图: 本来准备在ListView的每个Item的布局上设置一个隐藏的Button,当滑动的时候显示.但是因为每次只要存在一个Button,发现每个Item上的Button相互间不好控制.所以决定继承ListView然后结合PopupWindow. 首先是布局文件: delete_btn.xml:这里只需要一个Button <?xml version="1.0"

Android编程之ICS式下拉菜单PopupWindow实现方法详解(附源码下载)_Android

本文实例讲述了Android编程之ICS式下拉菜单PopupWindow实现方法.分享给大家供大家参考,具体如下: 运行效果截图如下: 右边这个就是下拉菜单啦,看见有的地方叫他 ICS式下拉菜单,哎哟,不错哦! 下面先讲一下实现原理: 这种菜单实际上就是一个弹出式的菜单,于是我们想到android PopupWindow 类,给他设置一个view 在弹出来不就OK了吗. PopupWindow 的用法也很简单 主要方法: 步骤1.new 一个实例出来,我们使用这个构造方法即可, 复制代码 代码如

Android 二维码 生成和识别二维码 附源码下载_Android

今天讲一下目前移动领域很常用的技术--二维码.现在大街小巷.各大网站都有二维码的踪迹,不管是IOS.Android.WP都有相关支持的软件.之前我就想了解二维码是如何工作,最近因为工作需要使用相关技术,所以做了初步了解.今天主要是讲解如何使用ZXing库,生成和识别二维码.这篇文章实用性为主,理论性不会讲解太多,有兴趣可以自己查看源码. 1.ZXing库介绍 这里简单介绍一下ZXing库.ZXing是一个开放源码的,用Java实现的多种格式的1D/2D条码图像处理库,它包含了联系到其他语言的端口

Android实现中国象棋附源码下载_Android

象棋,很多人多接触过,学者写了一个,大神可以指点一下~直接上代码: 贴出主要代码,想要Demo的点击下载:中国象棋Demo package wyf.ytl; import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.Color; impor

FCKeditor 2.6在ASP.NET中的配置方法(附源码下载)

导读: FCKEditor目前的最新版本是2.6,但支持.NET的DLL版本还是2.5,本文介绍 FCKEditor2.6在ASP.NET中的配置方法. 本文的示例下载地址(包含了整个解决方案及网站,下载后即可使用): 地址:http://www.china-aspx.com/Forum/showtopic-57.aspx FCKEditor官方下载地址:http://www.fckeditor.net/download 配置方法如下: 一.在官方网站上下载 下载地址:http://source

详解Android中Intent对象与Intent Filter过滤匹配过程_Android

如果对Intent不是特别了解,可以参见博文<详解Android中Intent的使用方法>,该文对本文要使用的action.category以及data都进行了详细介绍.如果想了解在开发中常见Intent的使用,可以参见<Android中Intent习惯用法>. 本文内容有点长,希望大家可以耐心读完. 本文在描述组件在manifest中注册的Intent Filter过滤器时,统一用intent-filter表示. 一.概述 我们知道,Intent是分两种的:显式Intent和隐式

.Net 转战 Android 4.4 日常笔记(9)--常用组件的使用方法[附源码]

原文:.Net 转战 Android 4.4 日常笔记(9)--常用组件的使用方法[附源码] 经过两天的学习,把常用的组件都学习了一遍,并做成了App 学习可能真没有捷径,跟学习html有点类似,都是一个控件一个控件学习并使用,最后拼凑成一个系统 链接:http://pan.baidu.com/s/1hqefzEW 密码:zbel  最低API 2.3 目标API 4.4 采用Android Studio 0.58IDE 希望给和我同样的初学者带来一些便利,和开发时候可以查询,第一个版本可能比较

详解 PHP加密解密字符串函数附源码下载_php实例

项目中有时我们需要使用PHP将特定的信息进行加密,也就是通过加密算法生成一个加密字符串,这个加密后的字符串可以通过解密算法进行解密,便于程序对解密后的信息进行处理. 下面先给大家展示下效果图,感兴趣的朋友继续阅读全文. 效果演示     源码下载 笔者收录了一些比较经典的PHP加密解密函数代码,分享给大家.加密解密原理一般都是通过一定的加密解密算法,将密钥加入到算法中,最终得到加密解密结果. 1.非常给力的authcode加密函数,Discuz!经典代码(带详解): function authc