TabHost
命名空間:
android.widget.TabHost
初始化函數(必須在addTab以前調用):
setup();
包含兩個子元素:
1.Tab標籤容器TabWidget(@android :id/tabs)
2.Tab內容容器FrameLayout(@android :id/tabcontent)
FragmentTabHost
命名空間:
android.support.v4.app.FragmentTabHost
android.support.v13.app.FragmentTabHost
初始化函數(必須在addTab以前調用):
setup(this, getSupportFragmentManager(), R.id.realtabcontent);
包含三個子元素:
1.Tab標籤 容器TabWidget(@android :id/tabs)
2.Tab內容 容器FrameLayout [寬高皆爲0dp](@android :id/tabcontent)
3.Tab內容 容器FrameLayout [真正的容器](@+id/RealTabContent)
疑問:爲何同時存在TabContent 和 RealTabContent 兩個FrameLayout?
答疑:《關於FragmentTabHost中TabWidget不能移到屏幕下面的Bug》
http://blog.csdn.net/wklbeta/article/details/11329207
資料:《Android開發:使用Fragment改造TabActivity》
http://www.blogjava.net/amplifier/archive/2012/12/27/393409.html
經驗 - 實現Tab功能的幾種方式:
1.(廢棄)繼承自TabActivity + TabHost 佈局 + Activity 內容
1.1:TabActivity爲ActivityGroup[在版本13裏被放棄]子類
1.2:使用getTabHost() 得到TabHost 對象
1.3:使用 newTabSpec(...).setContent(Intent) 添加Tab標籤與內容
2.(廢棄)繼承自ActivityGroup + TabHost佈局 + Activity 內容
2.1:ActivityGroup在版本13裏被放棄
2.2:使用findViewById 得到TabHost 對象
2.3:使用setup(new LocalActivityManager(this, true))初始化
2.4:使用 newTabSpec(...).setContent(Intent) 添加Tab標籤與內容
3.(簡單)繼承自FragmentActivity + FragmentTabHost 佈局 + Fragment 內容
3.1:使用findViewById 得到FragmentTabHost 對象
3.2:使用setup(this, getSupportFragmentManager(), R.id.realtabcontent)初始化
3.3:使用addTab(newTabSpec().setIndicator(),Fragment.class, null) 添加Tab標籤與內容
4.(複雜)繼承自FragmentActivity + TabHost 佈局 + ViewPager佈局 + Fragment 內容
4.1:使用findViewById 得到TabHost 對象
4.2:使用setup()初始化
4.3:使用TabHost.addTab(tabSpec.setContent(DummyTabFactory));添加Tab標籤與空內容
4.4:在TabHost.onTabChanged中控制ViewPager的實際顯示
4.5:滑動時在ViewPager.onPageSelected 中控制Tab標籤的選擇。
PS:當Tab標籤數量固定且不追求和系統保持一致的標籤效果,的狀況下這裏的TabHost佈局有些多餘。
如 :特有應用須要的Tab標籤固定,且有本身的一套顯示效果,那麼這裏徹底無需TabHost佈局。
5.(DIY)繼承自FragmentActivity + 自定義佈局 + ViewPager佈局 + Fragment 內容
5.1:自定義佈局中嵌入固定Tab標籤元素
5.2:在標籤元素點擊事件中控制ViewPager的實際顯示
5.3:滑動時在ViewPager.onPageSelected 中控制標籤元素的選擇。html