最新微软官方MSDN原版Win10系统下载

当前位置:主页 > U盘装系统 > U盘装win7系统 >

深入理解Android之界面构造

时间:2024-03-15    来源:九州体育    人气:

本文摘要:UI界面,对于每个应用于而言,是它与用户展开交互的门脸。好的门脸,不只是是要耀眼可人,最差还能秀色可餐过目不忘,甚至还应当有修养有气质,彬彬有理开朗冷静。 对于开发者来说,切削这样的面容,不但必须高超的技艺,也必须有称手的工具和对得起党的料子。俗话说,朽木不可雕也,芙蓉不是一日炼金术师的,不是什么平台都能叫特能书。 有套好用的UI框架,对于开发者而言,真为犹如沙漠中的太和,而要是遇见了杯具的UI套件,整个界面研发就犹如梦魇了。

九州体育

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中,我们经常将和每个listitem涉及的所有控件元素PCB成一个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的事件处理逻辑,使用的是观察者模式。

Android的控件获取了一些佩的add/setListener的模块,使得外部观察者,有机会处置控件事件。比如,你必须在某个button被页面时做到一些事情,你就必须衍生一个View.OnClickListener对象作为观察者,调用该控件的setOnClickListener模块登记进来,当button被页面,就可以取得处置页面事件的机会了。

当然,有的时候,你必须处置的逻辑更加简单,光是车站在外面围观热卖无法解决问题,有可能就必须衍生某个控件,去牵引onXXXX之类的事件处理函数,展开更加原始的掌控。  焦点  对于一个非触屏的机器,焦点的维系是一个极其重要的事情,而在有触屏的年代,焦点的地位虽有所上升,但仍然还是必须适当维护的。  Android中,是以控件树根为单位,来管理焦点的。

每个控件,可以设置上下左右四向的focus移往对象。当在一个控件上再次发生焦点移往事件,Android不会如前述,自顶向下根据原作好的焦点移往逻辑,函数调用到准确的控件上。和Symbian比起,感叹,感叹。  Layout  Layout是一类类似的ViewGroup控件,它们本身没任何可表明内容,形如半透明的玻璃盒子,存活的唯一理由,就是其中的内部结构,需要更佳的放置它的子控件们。

  比如线性的Layout,LinearLayout。放进这个Layout的子控件,不会按水平或横向方向,排排坐,一个挨着一个按顺序排列下去。TableLayout,可以将子控件按照表格的形式,一枚枚摆放好。而RelativeLayout则更加灵活性,可以原作各个控件之间的偏移和排序关系,合适自定义简单的界面。

  有了Layout的不存在,控件和控件之间仍然混杂的不存在,而是更加有机的融合在了一起,原作一起也更加便利。比Symbian那样人肉维系各个控件的关系,轻松自在多了。

  更加多  这些问题的原始答案,参看SDK中View的页面:/reference/android/view/View.html。  构建  有了这些对Android的UI控件的理解,可以看更加整体性的构建细节,那就是Activity的UI构建。    如上图右图,假设你做到了个如同元神线框中结构的一个界面,通过Activity的setContentView方法,塞进了Activity中,就不会构成图示的一个逻辑关系。

每一个Activity,都包括一个Window对象,它回应的是一个顶级的整屏幕上面的界面逻辑。在Android源码中,其构建是MidWindow,它包括了一个FrameLayout对象,呈现出出来就是那种带着一个title的界面样子。自定义的一堆控件,不会夹住Window的界面部分,在Activity中,所有事件的处置逻辑,是Window先品尝,没有消费丢弃在交由这填控件吃剩的。

  在整个控件树根的最顶端,是一个逻辑的树顶,ViewParent,在源码中的构建是ViewRoot。它是整个控件树根和WindowManager之间的事件信息的翻译者。WindowManager是Android中一个最重要的服务。

它将用户的操作者,翻译成沦为指令,发送给呈现出在界面上的各个Window。Activity,不会将顶级的控件登记到WindowManager中,当用户感叹触碰屏幕或键盘的时候,WindowManager就不会通报到,而当控件有一些催促产生,也不会经由ViewParent送来返回WindowManager中。从而已完成整个通信流程。


本文关键词:深入,理解,Android,九州体育,之,界面,构造,界面,对于

本文来源:九州体育-www.hebeiweilun.com

相关文章

U盘装win7系统排行榜

更多>>

U盘装系统排行榜

更多>>

系统教程排行榜

更多>>

公众号