一、android Tab的实现方式总结

说起Tab页,基本每个做移动端的都会需要。iOS中内置了一个,所以ioser用起来很方便。而android这一块就比较乱。

木器实现Tab效果的方式,主要有4种,下面分别来说一下他们的优缺点:

1.radioGroup-Fragment

这种实现方式代码量巨大,对所有的切换都需要自己来控制,逻辑复杂,效率低下。当然好处也很多,就是非常的灵活,很适合动态的做一些改变。radioGroup可以保证tab标签中只能有一个被选中,选中后就可以用FragmentManager来切换fragment达到tab页的切换效果。在切换时,我们还可以控制fragment的切换动画,达到左右滑入/滑出,或者渐变出现/消失灯效果。

2.Tabhost/TabhostActivity

这种实现方式可以说是android上最古老最正宗的,至今还可以在很多地方见到它的身影。但是它有个重大的缺陷——不支持Fragment,所以在3.0以后被google打入冷宫。

Tabhost相对RadioGroup来说,优点就是不需要写控制逻辑,只需要把子View一个个add进来,它自己就能实现控制。但是它的局限性非常之大,它只支持View而不支持Fragment,所以只能做控件切换,而不能做页面切换。但是用它来做控件切换也只支持点击切换,在动效上完全不及viewFliper和ViewPages,所以还需要把它和viewFliper配合使用,十分麻烦,所以本文暂且不表。

3.FragmentTabHost

继承自TabHost,是google从3.0时代推荐使用的,放在v4包中,专门用来切换fragment的,也是本文的重点。

4.我也忘了叫什么名字了

这个东西我忘了叫什么名字,是google从5.X时代推出的一种新的设计理念中(叫个M....什么的)的用来切换页面的玩意。在android官网看了一下这东东的效果,确实不错,但是可惜的是,貌似5.X以下版本不兼容。。。所以也先略过不表。

二、FragmentTabHost的结构剖析

首先看一下布局文件

xmlns:tools="http://schemas.android.com/tools"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:orientation="vertical"

tools:context=".MainActivity" >

android:layout_width="match_parent"

android:layout_height="0dp"

android:layout_weight="1">

android:id="@android:id/tabhost"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:background="#F6F6F6"

>

android:layout_width="match_parent"

android:layout_height="wrap_content">

android:layout_height="0dp" android:layout_width="0dp"

/>

主要分为两大部分,一个是android.support.v4.app.FragmentTabHost控件及其内包含的一些子控件;除此之外就是一个我们自定义的Frame布局,随便起个id叫contentLayout。

TabWidget:android.support.v4.app.FragmentTabHost中有个子控件——TabWidget,这个控件就是我们用来盛放标签按钮的容器。

tabcontent:android.support.v4.app.FragmentTabHost中有另外一个子控件——tabcontent,这个控件P用没有,但是必须要摆在这里,至于为什么,忘了,好像是google的一个版本兼容问题导致的。

contentLayout:这才是真正的内容容器。

这两大部分的相对位置决定了tab按钮是在上面还是在下面。如果想再上面显示,就把android.support.v4.app.FragmentTabHost放在contentLayout的上面。

接下来是activity中的代码部分,核心的就这几句:

//获取布局文件中的FragmentTabHost对象

tabHost=(FragmentTabHost)super.findViewById(android.R.id.tabhost);

//初始化,参数依次是:context,FragmentManager,内容容器的id

tabHost.setup(this,super.getSupportFragmentManager(),R.id.contentLayout);

//不显示tab按钮之间的分割线

tabHost.getTabWidget().setDividerDrawable(null);

//设置监听

tabHost.setOnTabChangedListener(this);

//用名称创建一个tab子页,并设置按钮的图标

TabSpec tabSpec=tabHost.newTabSpec(tabs.name).setIndicator(drawable);

//把子页添加进FragmentTabHost控制器,参数依次是 子页,fragment.class,传给这个页面的参数(Bundle类型,可为空)

tabHost.addTab(tabSpec,fragment1.class,null);

最后贴上Demo下载地址,请用AndroidStudio打开

参考:地址

JTPlistOnAndroid是一个可以在android上快速解析.plist文件的助手,可将plist解析成一个HashMap,HashMap的架构与原plist文件中的架构相对应。采用了p...

下载zip master分支 代码最近更新:2016-07-13

android tab布局框架,android Tab页详解相关推荐

  1. Android主布局框架整理

    Android主布局框架整理 本篇内容小生主要介绍的是几种常见的主框架的布局实现方式,仅供各位客官茶饭之余略微点评.闲话不说,切入正题. -No1.TabActivity+TabHost实现普通tab ...

  2. Android Binder框架实现之Parcel详解之基本数据的读写

       Android Binder框架实现之Parcel详解之基本数据的读写 Android Binder框架实现目录: Android Binder框架实现之Binder的设计思想 Android ...

  3. Android Binder框架实现之bindService详解

        Android Binder框架实现之bindService详解 Android Binder框架实现目录: Android Binder框架实现之Binder的设计思想 Android Bi ...

  4. Android 8.0学习(32)---Android 8.0源码目录结构详解

    Android 8.0源码目录结构详解 android的移植按如下流程:     (1)android linux 内核的普通驱动移植,让内核可以在目标平台上运行起来.     (2)正确挂载文件系统 ...

  5. Android 各大厂面试题汇总与详解(持续更新)

    介绍 目前网络中出现了好多各种面试题的汇总,有真实的也有虚假的,所以今年我将会汇总各大公司面试比较常见的问题,逐一进行解答.会一直集成,也会收集大家提供的面试题,如有错误,请大家指出,经过排查存在,会 ...

  6. android组件用法说明,Android第三方控件PhotoView使用方法详解

    Android第三方控件PhotoView使用方法详解 发布时间:2020-10-21 15:06:09 来源:脚本之家 阅读:74 作者:zhaihaohao1 PhotoView的简介: 这是一个 ...

  7. Android消息传递之EventBus 3.0使用详解

    前言: 前面两篇不仅学习了子线程与UI主线程之间的通信方式,也学习了如何实现组件之间通信,基于前面的知识我们今天来分析一下EventBus是如何管理事件总线的,EventBus到底是不是最佳方案?学习 ...

  8. 【转】Android APK反编译就这么简单 详解(附图)

     转自:http://blog.csdn.net/vipzjyno1/article/details/21039349/ [置顶] Android APK反编译就这么简单 详解(附图) 分类: and ...

  9. android自定义view案例,Android自定义View的实现方法实例详解

    一.自绘控件 下面我们准备来自定义一个计数器View,这个View可以响应用户的点击事件,并自动记录一共点击了多少次.新建一个CounterView继承自View,代码如下所示: 可以看到,首先我们在 ...

最新文章

  1. java 字符串 面试_Java 字符串面试题
  2. 在应用环境中如何构造最优的数据库模式
  3. Oracle-批量修改语句及相关知识点
  4. IdentityServer4与ocelot实现认证与客户端统一入口
  5. sqlite3的基本操作
  6. 比较完善的是vmware Fusion和Parallels
  7. darknet_ros消息在其它包中的订阅
  8. c语言的跳线帽,电脑主板上跳线帽有什么作用图文介绍
  9. transform用于图像检索
  10. 以逗号分隔的正则表达式_再见,正则表达式
  11. JAVA 最新 环境搭建(JDK 1.8 + Tomcat 9 + eclipse oxygen + mysql 5.7)
  12. 如何修改ftp服务器密码,如何修改FTP密码
  13. iPhone6和iPhone6Plus的适配
  14. 对于TextView中设置艺术字体
  15. C++ placement new 用法
  16. Q_D以及Q_Q指针理解
  17. 在word2016中对图片插入题注
  18. 英语不好,能不能学会编程?
  19. 便携式户外电源芯片CS32F031C8T6
  20. RK3568平台开发系列讲解(音频篇)Audio 音量控制流程

热门文章

  1. 纸上得来终觉浅、绝知此事要躬行
  2. 关于0“是不是自然数的了解
  3. 2011年腾讯实习生应聘(软件开发Web前端flash方向)笔试面试经历
  4. 蓝牙手环企业标准备案办理说明
  5. 智能物流仓库控制系统
  6. 机器学习:基于概率的朴素贝叶斯分类器详解--Python实现以及项目实战
  7. 123457123456#2#----com.ppGame.ShiZi43--前拼后广--shizi游戏_pp
  8. Linux 常用命令(一)
  9. PostgreSQL citus python环境搭建
  10. 坚果课堂回顾:团队项目管理SOP打造顶尖执行力