文档章节

android Tab页详解

猴亮屏
 猴亮屏
发布于 2016/07/22 12:41
字数 1305
阅读 78
收藏 0

一、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的结构剖析

首先看一下布局文件

<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" >


    <FrameLayout  android:id="@+id/contentLayout"
	     android:layout_width="match_parent"
    	android:layout_height="0dp"
    	android:layout_weight="1">

    </FrameLayout>

 	<android.support.v4.app.FragmentTabHost
 	    android:id="@android:id/tabhost"
 	    android:layout_width="match_parent"
 	    android:layout_height="wrap_content"
 	    android:background="#F6F6F6"
 	    >
      
        <TabWidget
			android:layout_width="match_parent"
			android:layout_height="wrap_content">
			
		</TabWidget>

 	    <FrameLayout android:id="@android:id/tabcontent"
 	        android:layout_height="0dp" android:layout_width="0dp"
 	        />
 	</android.support.v4.app.FragmentTabHost>

</LinearLayout>

主要分为两大部分,一个是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打开

参考:地址

william/JTPlistOnAndroid

star 1 | fork 0

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

issues: 没有issue

最近提交:

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

© 著作权归作者所有

共有 人打赏支持
猴亮屏

猴亮屏

粉丝 33
博文 518
码字总数 58250
作品 2
北京
Android工程师
Android选项卡实现之TabHost/TabSpec/TabWidget

Tab是什么就不用再用我来描述了。android的ui开发中,承载Tab的容器就是TabHost,每一个Tab对应一个Activity,每个Activity均会有自己的布局。 1.继承TabActivity 2.布局文件中使用tabHost,t...

古沐风
2013/11/27
0
2
Android 布局详解 -一线性布局以及重要属性

Android 布局详解 Android 布局是开发中非常重要的一个知识部分,它的布局分为以下几种: Linear Layout:线性布局 Relative Layout:相对布局 Table Layout:表格布局 Grid View:网格布局 ...

-天蓬元帅-
2013/12/15
0
0
Selector中的各种状态详解

更多文章请访问: http://user.qzone.qq.com/469241633/main#!app=2&via=QZ.HashRefresh&pos=1341222376 今天弄这个selector把脑壳弄得清痛,最终我的理解如下: 官方关于这个的介绍在:http:/...

程序袁_绪龙
2014/09/05
0
0
android中的Action与Category

Action Action常量 对应字符串 简单说明 ACTIONMAIN android.intent.action.MAIN 应用程序入口 ACTIONVIEW android.intent.action.VIEW 显示指定数据 ACTIONATTACHDATA android.intent.acti......

rainy86
2015/03/18
0
0
Android中Acition和Category常量表

Action Action常量 对应字符串 简单说明 ACTION_MAIN android.intent.action.MAIN 应用程序入口 ACTION_VIEW android.intent.action.VIEW 显示指定数据 ACTIONATTACHDATA android.intent.ac......

徐荣
2014/06/26
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

阿里云API网关使用教程

API 网关(API Gateway)提供高性能、高可用的 API 托管服务,帮助用户对外开放其部署在 ECS、容器服务等阿里云产品上的应用,提供完整的 API 发布、管理、维护生命周期管理。用户只需进行简...

mcy0425
26分钟前
4
0
解决远程登陆误按ctrl+s锁屏假死恢复

使用putty时,偶尔发生屏幕假死,不能输入等情况。 后来发现,只要数据ctrl+s,就会假死;输入ctrl+q就可以恢复过来。 很多刚从windows转移到linux上来工作的朋友,在用vi/vim编辑文件时,常常...

HJCui
29分钟前
0
0
@Transactional

事务管理是应用系统开发中必不可少的一部分。Spring 为事务管理提供了丰富的功能支持。Spring 事务管理分为编程式和声明式的两种方式。编程式事务指的是通过编码方式实现事务;声明式事务基于...

asdf08442a
33分钟前
2
0
widows下强制解除8080端口占用问题

使用win+R打开命令窗口 输入以下命令查看哪个任务占用了8080端口 netstat -ano |findstr "8080" 然后通过任务id强制关闭占用该端口的进程 tskill 10044 // 自己的试情况而定,这个ID是LISTE...

_Artisan
42分钟前
2
0
productFlavors简单实用

最近项目中,不同环境需要配置的参数越来越多,为了减少修改代码次数。研究了一下productFlavors的使用方式,总结如下 1. as3.0以上版本使用productFlavors时需要指定一个flavorDimensions,...

火云
45分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部