Android 之TabActivity

来源:互联网 发布:淘宝什么是实名认证 编辑:程序博客网 时间:2024/04/28 08:27

刚用到TabActivity,查了很多资料,总结一下。

1、TabActivity存在必要性以及google当时的困扰
a. 首先我们要明白一点,android系统是单窗口系统,不像windows是多窗口的(比如在windows系统上,我们可以一边聊QQ,一边斗地主等等)。也就是说,在一个时刻,android里面只有一个activity可以显示给用户。这样就大大降低了操作系统设计的复杂性(包括事件派发等等).
b. 但是像TabActivity那种效果又非常必要,用户体验也比较好。所以我觉得当时google开发人员肯定很纠结。 于是,一个畸形的想法产生了,就是在单窗口系统下加载多个activity,它就是TabActivity。

   tab组件一般包括TabHostTabWidgetFrameLayout,且TabWidgetFrameLayout属于TabHost

2、TabActivity

  首先Android里面有个名为TabActivity来给我们方便使用。其中有以下可以关注的函数:
  public TabHost getTabHost ()  获得当前TabActivity的TabHost
  public TabWidget getTabWidget () 获得当前TabActivity 的TabWidget
 
  public void setDefaultTab (String tag) 这两个函数很易懂, 就是设置默认的Tab
  public void setDefaultTab (int index)  通过tab名——tag或者index(从0开始)

3、TabHost

  那么我们要用到的Tab载体是TabHost,需要从TabActivity.getTabHost获取。
  现在看看TabHost类,它有3个内嵌类:1个类TabHost.TabSpec,2个接口 TabHost.TabContentFactoryTabHost.OnTabChangeListener。后面会介绍这些类和接口。
 TabHost类的一些函数:
  public void addTab (TabHost.TabSpec tabSpec) 添加 tab,参数TabHost.TabSpec通过下面的函数返回得到

4、TabHost.TabSpec

  从上面的函数可以知道如何添加tab了,要注意,这里的Tag(标签),不是Tab按钮上的文字。
  而要设置tab的label和content,需要设置TabHost.TabSpec类。 引用SDK里面的话——“A tab has a tab indicator, content, and a tag that is used to      keep track of it.”,TabHost.TabSpec就是管理这3个东西:
  public String getTag ()
  public TabHost.TabSpec setContent
  public TabHost.TabSpec setIndicator
 
  我理解这里的Indicator 就是Tab上的label,它可以
  设置label : setIndicator (CharSequence label)
  或者同时设置label和icon :setIndicator (CharSequence label, Drawable icon)
  或者直接指定某个view : setIndicator (View view)

 对于Content ,就是Tab里面的内容,可以
  设置View的id : setContent(int viewId)
  或者TabHost.TabContentFactory 的createTabContent(String tag)来处理:setContent(TabHost.TabContentFactory contentFactory)
  或者用new Intent 来引入其他Activity的内容:setContent(Intent intent)
TabHost控件(id="@android:id/tabhost")->TabWidget(必须命名为tabs)->FrameLayout(必须命名为tabcontent)。


0 0