百度贴吧布局框架的研究与实现(Android版本)

2014-11-24 11:01:46 · 作者: · 浏览: 1

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


悬浮式标题栏和标签栏:(百度贴吧);直通式标题栏和标签栏:(QQ空间)




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


1、 悬浮式标题栏的实现



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





我的贴吧和我的书签这两个按钮的按下与松开的是通过切换android:background和android:src的图片资源来实现的,而没有采用通常的selector方式,代码中设置按钮的单击响应函数,更换按钮图片资源的关键代码如下:



2、 悬浮式标签栏的实现


标签栏的实现有很多种组合,比较省事的是使用系统提供的TabHost+TabWidget,比较自由的是使用TabHost+RadioGroup,下面使用第二种方式。



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



由于这里我们使用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);



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