对于手机开发,我一直坚持的是“用iPhone的方式开发iPhone应用,用Android的方式开发Android应用”。但如何去把握iPhone或者Android的方式呢?在iPhone开发时可能需要看大量Apple文档。而Android在看文档的同时还可以看看源码。这源码中有时可以发现一些内部实现加深理解,有时可以受到某些可以在应用中使用的启发。总之源码是一个需要去发掘的“矿场”,时而不时地都会发现一些“金子”。

     Android的TabHost默认是顶部显示的,而目前很多Android的应用又都是采用和iPhone类似的底部Tab设计。实现的方法很多,但我面对该问题的时候,本能想到的就是想借鉴下TabHost的设计,看看是否可以动些手脚。

 

Android源码分析:TabHost_第1张图片           Android源码分析:TabHost_第2张图片

 

 

 

 

分析源码后,总结其设计如下:

Android源码分析:TabHost_第3张图片

 

    对于一些自然和漂亮的设计,其实类图就说明了一切。其中TabHost包括一个用于显示内容的FrameLayout以及排布各个Tab指示的TabWidget,其中各个Tab的规格通过TabSpec指定。由于TabHost的Tab以及各个Tab的内容有不同的风格,因此在TabSpec中定义中IndicatorStrategy和ContentStrategy。其中IndicatorStrategy用于指定Tab指示的生成方式,实现类分别有LabelIndicatorStratey、LabelAndIconIndicatorStratey和ViewIndicatorStratey。LabelIndicatorStratey用于纯文本的Tab指示,LabelAndIconIndicatorStratey用于文本+图标的Tab指示,而ViewIndicatorStratey则是将指定的View作为Tab指示。对于Tab的内容,通过ContentStrategy也可以指定多种形式的内容获取方式。

 

如果想有点更真实的感觉,建议去查看下源码~!