还记得几个月前刚接触“百度贴吧”这款应用时,瞬间就被它的悬浮式标题栏以及标签栏所吸引,虽然当时身边有个UI的MM说悬浮式一般都是具备隐藏的功能时才设计成这样的,一般情况下还是用直通式的好,在这里我也不讨论孰优孰劣,截取两个图,大家自己品味下。
悬浮式标题栏和标签栏:(百度贴吧);直通式标题栏和标签栏:(QQ空间)

本文的目的就是研究下百度贴吧的这个标题栏和标签栏的实现原理;
1、 悬浮式标题栏的实现

使用第二种方式实现的标题栏的布局文件如下:


我的贴吧和我的书签这两个按钮的按下与松开的是通过切换android:background和android:src的图片资源来实现的,而没有采用通常的selector方式,代码中设置按钮的单击响应函数,更换按钮图片资源的关键代码如下:
2、 悬浮式标签栏的实现
标签栏的实现有很多种组合,比较省事的是使用系统提供的TabHost+TabWidget,比较自由的是使用TabHost+RadioGroup,下面使用第二种方式。

标签栏的实现必须具备三个基本元素,如下图所示,分别是1)id为@android:id/tabhost的

由于这里我们使用TabHost+RadioGroup的方式,也就是使用RadioGroup代替TabWidget,所以布局文件中TabWidget的可见性设置为gone,紧接上面布局的是RadioGroup的布局:
其中
1) maintab_toolbar_bg 是标签栏的背景图,实现悬浮效果;
2) RadioButton中的
android:drawableTop="@drawable/tabs_sort"
android:text="@string/remind"
组合可以轻松实现图片上文字下的效果;
3) FrameLayout中的android:layout_marginTop="-10.0dip"实现标签栏与上方id为tabcontent的FrameLayout部分重叠的效果(10.0dip);

接下来就是代码如何实现标签的添加,标签的点击响应等等,直接看代码了: