本人原创,转载请注明:http://blog.csdn.net/fzh0803/archive/2011/06/21/6559239.aspx

上节分析了TabHost,这节接着分析TabWidget.

TabWidget比较简单,它继承自LinearLayout,用来放标签。它覆盖了addView(View child)来实现添加一个标签。在没有指定view的LayoutParams时它默认给标签加上高度充满TabWidget,宽度上根据标签个数平分的LayoutParams,这样,如果在添加标签时没有设定LayoutParams的时候就会看到标签平均分布的情况。然后再根据有没有dividerDrawable来判断是否添加,这个dividerDrawable应该是标签之间的那个图片。TabWidget规定的较固定,使用起来的时候有可能很不美观,实际上看到网上有人说用TabActivity还不如用Gallery,这句话有一定道理,如果不需要把一个activity作为一个view嵌入进去的话使用Gallery的确更美观更炫,但存在就有道理,我想TabActivity真正存在的原因就是为了embeded activity,即把activity做为一个view加入到另一个actvity中,而又有LocalActivityManger来控制activity的生命周期所以不必操心生命周期问题。由于TabWidget的布局较为固定,所以可能会导致看起来不美观,有需要根据需求定制自己的TabWidget的需要(比如我自己就在TabWidget中间加入空隙,使它看起来有标签被分组了的效果),在修改的时候需要注意两个函数:getChildTabViewAt(int index)和getTabCount(),由于系统本身的view排布要么全部是标签,要么一个dividerDrawable加一个标签的排布,所以这两个函数实现较为简单,如果定制自己的TabWidget的话可能需要修改这两个函数,会稍微复杂点。

LocalActivityManager的话主要看一个函数startActivity(String id, Intent intent),因为String型的id是用来标识一个activity的,所以在addTab()的时候不能让tab tag重。因为TabActivity中当点击内容是activity的标签时就会调用startActivity()来获取view,而在启动的时候根据Intent的Flags处理有所不同,所以设置IntentFlags的时候需要注意,(以下此段来自个人翻译,英语水平差如又错误请见谅)如果在调用startActivty()的时候这个id 下已经有一个activity被启动了的话,那么根据不同情况它要么被destroy然后再重新创建一个然后启动,要么就直接使用它。原文和翻译如下:

/**

* Start a new activity running in the group. Every activity you start

* must have a unique string ID associated with it -- this is used to keep

* track of the activity, so that if you later call startActivity() again

* on it the same activity object will be retained.

*

*启动一个运行在group的新的activity.每一个启动的actvity必须拥有

*一个唯一的string ID,它被用来记录activity的踪迹,所以如果下次

*再次调用startActivity() 的时候,相同的activity 对象将被保留下来。

*

* <p>When there had previously been an activity started under this id,

* it may either be destroyed and a new one started, or the current

* one re-used, based on these conditions, in order:</p>

*

*如果在这个id下已经有一个activity启动了的话,那根据不同情况

*它要么被destroyed掉然后启动一个新的,要么当前存在的这个

*被重新使用,按以下顺序:

* <ul>

* <li> If the Intent maps to a different activity component than is

* currently running, the current activity is finished and a new one

* started.

*

*如果intent映射到跟当前运行的不同的 activity commponent(包名)

*的话,当前的activity会被结束掉然后一个新的会被启动。

*

* <li> If the current activity uses a non-multiple launch mode (such

* as singleTop), or the Intent has the

* {@link Intent#FLAG_ACTIVITY_SINGLE_TOP} flag set, then the current

* activity will remain running and its

* {@link Activity#onNewIntent(Intent) Activity.onNewIntent()} method

* called.

*

* 如果当前的activity用了不是多运行的模式(比如 singleTop),

* 或者intent 设置了 FLAG_ACTIVITY_SINGLE_TOP,那么当前的activity

* 仍旧会继续运行并且会调用 Activity.onNewIntent().

*

* <li> If the new Intent is the same (excluding extras) as the previous

* one, and the new Intent does not have the

* {@link Intent#FLAG_ACTIVITY_CLEAR_TOP} set, then the current activity

* will remain running as-is.

* <li> Otherwise, the current activity will be finished and a new

* one started.

* </ul>

*

* 如果新的intent(不包括 extras)和以前的完全一样,并且没有设置

* FLAG_ACTIVITY_CLEAR_TOP ,那么当前的 actvity 仍然会继续运行。

*否则(其他情况下),当前的activity会被结束掉然后启动一个新的activity。

TabActivity,LocalActivityManager,TabHost,TabWidget深度分析(二)相关推荐

  1. TabActivity,LocalActivityManager,TabHost,TabWidget深度分析(一)

    本人原创,转载请注明:http://blog.csdn.net/fzh0803/archive/2011/06/21/6559081.aspx TabAcitivity继承自AcitivtyGroup ...

  2. 最新最全的免费股票数据接口--沪深A股深度分析机构持股数据API接口(十二)

    沪深深度分析数据API文档 数据来源:麦蕊智数 请求方式:Get(直接在浏览器打开就可以看到返回的数据) 数据格式:标准Json格式[{},...{}] 数据时效:实时更新 API说明文档:https ...

  3. 2022-2028年中国交通建设PPP模式深度分析及发展战略研究报告(全卷)

    [报告类型]产业研究 [出版时间]即时更新(交付时间约3个工作日) [发布机构]智研瞻产业研究院 [报告格式]PDF版 本报告介绍了PPP模式行业相关概述.中国PPP模式行业运行环境.分析了中国PPP ...

  4. Memcached深度分析【zz】

    Memcached深度分析 Memcached是danga.com(运营LiveJournal的技术团队)开发的一套分布式内存对象缓存系统,用于在动态系统中减少数据库负载,提升性能.关于这个东西,相信 ...

  5. 计算机科学与技术的深度研究,专业深度分析--计算机科学与技术.docx

    专业深度分析 计算机科学与技术 计算机科学与技术 (一)学科概况 计算机科学与技术是研究计算机的设计与制造,以及信息获取.表示.存储.处理.传输和利用等方面的理论.原则.方法和技术的学科.它包括科学与 ...

  6. 波士顿大学研究生计算机科学专业排名,波士顿大学计算机科学排名2020年专家资讯深度分析...

    原标题:波士顿大学计算机科学排名2020年专家资讯深度分析 波士顿大学的所在位置是属于新英格兰地区New England,此区为美国独立革命的发源地,也是欧洲教徒最早登陆新大陆的地点,此区共有56所大 ...

  7. 查看队列深度_不为人知的网络编程(十一):从底层入手,深度分析TCP连接耗时的秘密...

    " 本文作者张彦飞,原题"聊聊TCP连接耗时的那些事儿",本次收录已征得作者同意,转载请联系作者.即时通讯网收录时有少许改动.本文已同步发布于52im社区:http:// ...

  8. 深度学习二(Pytorch物体检测实战)

    深度学习二(Pytorch物体检测实战) 文章目录 深度学习二(Pytorch物体检测实战) 1.PyTorch基础 1.1.基本数据结构:Tensor 1.1.1.Tensor数据类型 1.1.2. ...

  9. 典型相关分析_微生物多样研究—微生物深度分析概述

    一.微生物深度分析方法核心思想 复杂微生物群落解构的核心思想: 不预设任何假定,客观地观测整个微生物组所发生的一系列结构性变化特征,最终识别出与疾病或所关注的表型相关的关键微生物物种.基因和代谢产物. ...

最新文章

  1. 我国数字出版发展尚存三大难题
  2. OS开发UI篇—popoverController使用注意
  3. 从另一服务器传输文件到本服务器(服务器间传输文件)
  4. IOSday05 UIScrollView使用
  5. Python 框架篇
  6. SAP S/4HANA客户关系管理之变
  7. [HEOI2016/TJOI2016]字符串 (后缀数组+主席树+二分)
  8. 【OJ二分06】月度开销
  9. vue向ifarm传值_vue组件间传值
  10. LG_2051_[AHOI2009]中国象棋
  11. 拳王虚拟项目公社:微店闲鱼怎样自动化卖虚拟商品,虚拟资源自动化收钱项目
  12. SharePoint 2019 图文安装教程
  13. HttpClient4 基本操作
  14. Ionic4 Ionic-refresher 下拉更新
  15. ImageNet中英文类别对照
  16. 高密度无线覆盖解决方案
  17. 电脑默认字体如何进行替换教学
  18. 如何在Python中用集合实现随机的1~100的20个数字
  19. 9*9数独——C++实现
  20. 字符串的方法练习------Python篇

热门文章

  1. 云服务器租用成本节约在哪里?
  2. jquery组件WebUploader文件上传用法详解
  3. 树形DP-HDU1561 The more, The Better
  4. Centos下安装MySQL全过程(linux下安装MySQL)
  5. 你需要明白的SQL SERVER书签查找(Bookmark Lookup)
  6. 第二十四章:页面导航(六) 1
  7. 2018程序员必备的4大网站推荐(代码、编程、SQL等)
  8. MDT2010-windows 7镜像捕获与模板镜像部署(二)(特别版)
  9. 简单的横向ListView实现(version 4.0)
  10. ASP.NET MVC5总结(二)@HTML扩展