深入Android 【六】 —— 界面构造.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
深入Android 【六】 —— 界面构造

深 入Android 【六】 —— 界面构造 界面构造 UI界面,对于每个 应用而言,是它与用户进行交互的门脸。好的门脸,不只是是要亮丽可人,最好还能秀色可餐过目不忘,甚至还应该有涵养有气质,彬彬有理温柔耐心。 对于开发者来说,锻造这样的面容,不但需要高超的技艺,也 需要有称手的工具和对得起党的料子。俗话说,朽木不可雕也,芙蓉不是一日炼成的,不是什么平台都能叫特能书。有套好用的UI框架,对于开发者而言,真有如 沙漠中的甘露,而要是撞见了杯具的UI套件,整个界面开发就有如梦魇了。 Android的UI框架,最核心的,是资源和Layout体 系,然后,通过完善的控件库,简明的接口设计,进一步帮助开发者,能够最快的搭建自己需要界面(听到这 里,Symbian同学开始钻土...)。 UI控件 做UI,有时 候就像搭积木,在Android中,这个最原子的积木块,就是View。 所有其他的UI元素,都是派生于此类的子孙类们。 又从SDK中偷来张图,用来描述Android的UI 控件结构,在每一个window下,这都是一个标准而完整的树结构。View有一个子类ViewGroup,它相当于一个容器类或者是复合控件,所有派生与ViewGroup的子 类在这颗UI树中都可以承担着父节点的职责,而另一些绕过ViewGroup从View直通下来的,就只能蜷局在叶节点的范畴内了。 之所有说这是 一个很标准的控件树,是因为父控件对子控件有绝对的掌控权,每个子控件的占地面积和位置,都是基于父控件来分配的,它 能够接受和处理的事件,也是父控件派发下去的。这样的结构,被很多平台和框架广泛的认可,和传统的win开发和杯具的Symbian相比,虽然因为事件传 播途径变长了,很多操作的效率变低了,但整个结构更有层次性,每个控件只需要多其父控件负责指挥子控件就好,职责明确,逻辑简单,利于开发和设计。 谈及任何平台的控件,都有一些不可避免的主题,比如,每 个控件如何标识,如何设定大小和位置,如何接受和处理事件,如何绘制,诸如此类。 标 识 在Android中,你可以为每个 控件选择设定一个id,这个id的全局的唯一性不需要保证,但在某个局部的范围内具有可识别性,这样就可以通过这个 id找到这个控件(如果不需要查找,就别设置了...)。 但是,在父控件中逐级的find比较,找到id匹配的控件,然后再做转型,是一个比较重量的操作,于是 Android又为控件憋出另一个属性,tag。它接受任意object类型的数据,你可以把和这个控件对象相关的内 容堆在里面。比如,在list中,我们常常将和每个list item相关的所有控件元素封装成一个object,扔到tag中,就不需要每次都去比较id进行寻找,更加高效快捷。 尺寸 在Android中,控件最重要的大小属性,就是width/height, 开发者可以明确的指明控件的大小,可以设定成为fill_parent和wrap_content, 这样的概念性的大小。丈量并设定控件的位置,是通过两步来进行的。 第一步是measure。它传入此控件的width/height信息, 控件会根据自己的参数,计算出真实需要的width/height,然后调用setMeasuredDimension方 法,缓存成成员变量,留作后用。 在 计算出大小之后,会进行另一个步骤,layout。在这个过程中,父控件会计算其上各个子控件的位置,从而完成整个大 小和位置的确定流程。整个measure和layout的流程,都是自上到下,从树顶往叶子来推进的。 当开发人员需要自定义控件的时候,可能需要关注这些内容, 通过重载onMeasure和onLayout方法,可以定义自己控件的丈量方 式。 事件 在Android中,所有的按键,触屏等事件,都是从顶至下 进行分发的。每个ViewGroup的对象,会维系一个focused变量,它表示在这个父控件中具备focus的控 件,当有按键时间发生的时候,会找到这个focused子控件,并传递给它。同理,触屏事件的分发也是类似,只不过和focus无关,父控件会遍历所有子 控件,看看谁处于触碰位置,从而传递给谁。 另外 还有一些事件,逻辑上并不是从顶至下发起的。比如,当你修改某个子控件的内容,使得该子控件的大小和内容都发生了变化,就需要进行控件的重排和重绘,这些 操作不仅是子控件自己的事情,需要整个控件树上的所有控件都需要配合。在Android中,处理这类事情的实现策略是子控件维系一个ViewParent对象, 该对象象征着整个控件树的管理者,子控件产生影响整个控件树的事件时,会通知到ViewParent,ViewParent会将其转换成一个自顶向下的事 件,分发下去。 Android的事件处理逻辑,采用的是观察者模式

文档评论(0)

baoyue + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档