学习Android之用户界面基础

作者:郑萌,华清远见嵌入式培训讲师

在上一次的学习中,我们主要了解了Android系统的进程优先级排序、不同优先级进程之间的变化方式,Android系统的四大基本组件及其用途,Activity的生命周期中各个状态以及状态间的变化关系、Android应用程序的调试方法和工具。在此基础上,本章我们将进入对Android程序界面开发的学习,包括用户界面基础、用户界面的控件的使用、界面布局的特点及使用方法、菜单的使用方法、界面事件的处理方法等。

5.1. 用户界面基础

用户界面(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)。


图5-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 衍生出來,如图5-2所示。


图5-2 Android视图树(View Tree)

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

学习Android之用户界面基础_第1张图片
图5-3 ViewGroup树形层次结构

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

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

转载自:http://www.embedu.org/Column/Column442.htm

更多相关文章

  1. 在你的android设备运行java web应用程序
  2. Android用户界面设计:基本按钮

随机推荐

  1. Android(安卓)项目(一):自定义View绘制“折
  2. 每个Android迷应该使用的75个超酷app
  3. 2020腾讯Android岗初级到高级面试真题收
  4. 【android】使用Event Bus模式解耦Androi
  5. android 网络框架性能优化分析
  6. android 手把手教你打造属于自己的文件浏
  7. Android变形矩阵——Matrix
  8. android 内存优化详解
  9. 一个轻量级、可插拔的Android消息推送框
  10. Android调用系统相册和相机选择图片并显