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 中控制標簽元素的選擇。
By:AsionTang
At:2013年9月27日 10:29:08