您的位置:华清远见教育科技集团 >> Android资料 >> Android用户界面开发基础  
 
Android用户界面开发基础
分享到:

用户界面(User Interface,UI)是系统和用户之间进行信息交换的媒介,实现信息的内部形式与用户可以接收形式之间的转换。

在Android系统中,Android自带有许多要求,预示着其用户界面的复杂性:它是一个支持多个并发应用程序的多处理系统,接受多种形式的输入,有着高交互性,必须具有足够的灵活性,以支持现在和未来广泛的设备。令人印象深刻的是丰富的用户界面及其易用性,实现了所有给定的功能。但为了使用应用程序在不同的设备上正常的显示以及运行,避免对系统性能造成过大的负担,应该明白其工作原理。

Android使用XML文件描述用户界面;资源文件独立保存在资源文件夹中;对用户界面描述非常灵活,允许不明确定义界面元素的位置和尺寸,仅声明界面元素的相对位置和粗略尺寸。以下就来介绍一下Android的用户界面框架。

Android是在Java环境中增加了一个图形用户界面(GUI)工具包,联合了AWT,Swing,SWT,和J2ME(撇开Web UI的工具包)。Android框架和他们一样,它是单线程的,事件驱动的,并建立一个嵌套的组件库。

Android用户界面框架(Android UI Framework),像其他的UI框架一样,采用了MVC(Model-View-Controller)模型,提供了处理用户输入的控制器(Controller),显示用户界面和图像的视图(View),以及保存数据和代码的模型(Model)。


图-1 Android用户界面框架MVC模型

其中Model是应用程序的核心。虽然特定应用程序的视图(View)和控制器(Controller)必然反映他们操纵的Model,但一个Model可能是由几个不同的应用使用。想想看,例如,一个MP3播放器的应用程序以及一个将MP3文件转换成WAV MP3文件的程序,对于这两个应用程序,Model包括它的MP3文件格式和编解码器。然而,前者的应用程序,有熟悉的停止,启动和暂停控制等操作。后者可能不会产生任何声音;相反,它会设置比特率的控制等。此时,他们的Model都是对所有的文件数据。

其中的控制器(Controller)能够接收并响应程序的外部动作,如按键动作或触摸屏动作等。控制器使用队列处理外部动作,每个外部动作作为一个对应的事件被加入队列中,然后Android用户界面框架按照“先进先出”的规则从队列中获取事件,并将这个事件分配给所对应的事件处理方法。例如,当用户按下他的手机上的键,Android系统生成的KeyEvent,并将其添加到事件队列中。后,在之前已排队的事件被处理后,KeyEvent是从队列中删除的,并作为当前选择View的dispatchKeyEvent方法的调用参数传递。一旦事件被分派到的焦点组件,该组件可能会采取适当的行动来改变程序的内部状态。例如,在MP3播放器应用程序中,当用户点击屏幕上的播放/暂停按钮时,触发该按钮的事件,处理方法可能更新Model,恢复播放一些先前所选乐曲。

视图(View)是应用程序给用户的反馈。它负责应用程序的部分渲染显示,发送音频扬声器,产生触觉反馈等。视图部分应用视图树(View Tree)模型。视图树是由Android用户界面框架中的界面元素以一种树形结构组织在一起的,Android系统会依据视图树的结构从上至下绘制每一个界面元素。每个元素负责对自身的绘制,如果元素包含子元素,该元素会通知其下所有子元素进行绘制。

下面就来详细介绍一下视图树。Android 当中的可视化界面单元,可分为“容器”与“非容器”两类,容器类继承ViewGroup,非容器类则从 View 衍生出来,如图-2所示。


图-2 Android视图树(View Tree)

视图树由View和ViewGroup构成。其中,View是界面的基本的可视单元,存储了屏幕上特定矩形区域内所显示内容的数据结构,并能够实现所占据区域的界面绘制、焦点变化、用户输入和界面事件处理等功能。同时View也是一个重要的基类,所有在界面上的可见元素都是View的子类。ViewGroup是一种能够承载含多个View的显示单元,它承载了界面布局,同时还承载了具有原子特性的重构模块。

如图-3所示,这些 Layout 可以套叠式地组成一棵视图树。其中,父节点的 Layout 与子节点的 LayoutParams之间有控制关系,例如,若父节点是RelativeLayout,则子节点的单元中可以指定RelativeLayout.LayoutParams 中的属性,以控制子节点在父节点中的排列状况。


图-3 ViewGroup树形层次结构

在单线程用户界面中,控制器从队列中获取事件和视图在屏幕上绘制用户界面,使用的都是同一个线程。这样的单线程用户界面使得处理方法具有顺序性,能够降低应用程序的复杂程度,同时也能降低开发的难度。

注:单线程用户界面存在缺点是:如果事件处理方法过于复杂,可能会导致用户界面失去响应。

 更多相关文章

·Android DevTools开发调试工具
·Windows下Android开发环境搭建步骤图解
·Android开发之Android的原生库
·Android应用-用户图形界面设计概念(二)
·Android程序UI设计