[转]Android学习笔记:TabHost 和 FragmentTabHost

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

作者:Asion Tang

出处:http://asiontang.cnblogs.com

时间: 2024-10-31 10:15:25

[转]Android学习笔记:TabHost 和 FragmentTabHost的相关文章

Android学习笔记(二二): 多页显示-Tag的使用

在手机屏幕中,Tab也是比较常用的,通常和List结合,例如我们手机的通信录.下面是Tag的结构. TabHost是整个Tab的容器,包括两部分,TabWidget和FrameLayout.TabWidget就是每个tab的标签,FrameLayout则是tab内容. 如果我们使用extends TabAcitivty,如同ListActivity,TabHost必须设置为@android:id/tabhost TabWidget必须设置android:id为@android:id/tabs F

Android学习笔记(三五):再谈Intent(下)-一些实践

Android的UI框架要求用户将他们的app分为activity,通过itent来进行调度,其中有一个main activity由Android的launcher在桌面中调用.例如一个日历的应用,需要查看日历的activity,查看单个事件的activity,编辑事件的activity等等.在查看日历的activity中,如果用户选择的某个事件,需要通过查看事件的activity来处理.这就是最近本的app UI框架,本次,我们将学习如何通过intent来完成. Activity之间的关系 某

Android学习笔记——关于onConfigurationChanged

从事Android开发,免不了会在应用里嵌入一些广告SDK,在嵌入了众多SDK后,发现几乎每个要求在AndroidManifest.xml申明Activity的广告SDK都会要求加上注明这么一句属性: android:configChanges="orientation|keyboard|keyboardHidden" 通过查阅Android API可以得知android:onConfigurationChanged实际对应的是Activity里的onConfigurationChan

Android学习笔记18:自定义Seekbar拖动条式样

Android学习笔记18:自定义Seekbar拖动条式样

Pro Android学习笔记(三三):Menu(4):Alternative菜单

什么是Alternative menu(替代菜单) 举个例子,Activity显示一个文本文件.如果用户想对文本文件进行编辑,Activity不提供编辑能力,但可由其他activity或者其他应用提供.我们将相关信息存储在一个intent中,例如该文本的Uri.这个intent可以匹配系统的多个应用,替代菜单将这些应用一一列出,菜单项的title就是该可被调用的activity的名字,图标也为该可被调用的activity的图表. 小例子说明 我们通过一个小例子进行学习,简单地打开一个URL:we

android学习笔记--android启动过程之init.rc文件浅析

1.  init.rc文件结构文件位置:init.c  : /system/core/initinit.rc  : /system/core/rootdir 首先init.rc文件是以模块为单位的,每个模块里的内容都是一起执行的,模块分为3种类型:on.service.import.我们可以看下init.rc文件是怎么写的:1.import import /init.usb.rc import /init.${ro.hardware}.rc import /init.trace.rc 上面的内容

android学习笔记——利用BaseAdapter生成40个列表项

RT: main.xml ? 1 2 3 4 5 6 7 8 9 10 11 12 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"               android:orientation="vertical"        

Android学习笔记_78_ Android开发中使用软引用和弱引用防止内存溢出

在<Effective Java 2nd Edition>中,第6条"消除过期的对象引用"提到,虽然Java有 垃圾回收机制,但是只要是自己管理的内存,就应该警惕内存泄露的问题,例如的对象池.缓存中的过期对象都有可能引发内存泄露的问题.书中还提到可以用 WeakHashMap来作为缓存的容器可以有效解决这一问题.之前也确实遇到过类似问题,但是没有接触过"弱引用"相关的问题,于是查阅了一些资料. <Java 理论与实践: 用弱引用堵住内存泄漏>

Android学习笔记(十四)——在运行时添加碎片(附源码)

在运行时添加碎片 点击获取源码 将UI分割为多个可配置的部分是碎片的优势之一,但其真正强大之处在于可在运行时动态地把它们添加到活动中. 1.使用上一篇创建的Fragments项目,在main.xml文件中注释掉两个<fragment>元素: 2.在FragmentActivity.java中添加下面的代码: FragmentManager fragmentManager = getSupportFragmentManager();//向活动添加碎片 FragmentTransaction fr

Android学习笔记(十五)——碎片的生命周期(附源码)

碎片的生命周期 点击下载源码 与活动类似,碎片具有自己的生命周期.理解了碎片的生命周期后,我们可以在碎片被销毁时正确地保存其实例,在碎片被重建时将其还原到前一个状态. 1.使用上一篇的项目Fragments,在Fragment1.java文件中添加如下代码: package net.zenail.Fragments; import android.app.Activity; import android.os.Bundle; import android.support.v4.app.Fragm