2.0 Android用户界面
开发一个好的应用界面,通常需要做到内容清楚、指示明白、屏幕美观和具有亲切感.在程序设计过程中,为了更好的表现界面中的元素如图形和文字,需要系统提供基本的界面框架.Android平台提供了与网页类似的界面控制,可以使用XML定义界面元素,使用Theme来定制风格.使用不同的drawable(mdpi/ldpi/hdpi)来定制不同分辨率的图形元素. 2.0.1Android用户界面系统概述 Android系统是基于Linux的手机操作系统,但是Android的桌面则完全没有使用x-windows作为用户界面.Android的GUI系统主要是由skia提供2D和OpenG ElS提供3D图形功能.从代码层次来说,上层提供Java API的绘图结构,下层利用C实现对显示设备和输入设备的驱动.
按照上图的系统分层,从下到上分别是如下一些功能模块: 【1】pixlflinger,从名字就可以知道,这是Android系统中专门用来处理像素格式的工具类库 【2】libui是一个框架性质的集成库,它包含了颜色格式、窗口、事件、Surface(显示界面)Overlay(叠加层)、Camera(像机接口)等多方面定义. 【3】Surface系统,是Android中的显示核心,主要用来提供显示输出.通常可以实现多层Surface,在其上,Android为JAVA API分别提供了两种绘图方式,一种是基于VIEW(在Surface之上进行了封装),另外一种直接通过Surface 【4】基于Skia的2D图形系统,提供了一个基于Canvas的2D图形绘制能力 【5】基于OpenGl ES的3D图形系统. 从应用开发来说,GUI系统所涉及到Java框架层的内容主要包括如下: 【1】android.view.*及android.widget.*,基本图形元素如铵钮、菜单等 【2】android.graphics.*基于Skia提供2D绘图接口 【3】javax.microediton.khronos.opengles标准的Opengl ELS接口. 从普通的应用APP开发程序员来说,了解surface及其上部分进行开发就可以了. 2.0.2 基于View的Android用户界面绘制 从前面我们已经知道,组成Android界面的基本UI元素由Android.view.View提供实现,其中ViewGroup作为rootnode进行初始化实现屏幕,按照SDK上解释,当一个Activity收到焦点,它将请求绘制它的框架布局界面,这个过程是由Android框架来完全的,但对每个Activity来说,它只需要提供它的布局的根节点,绘制过程由ViewGroup的子类Layout开始,它开始根据布局的树型图,进行尺寸大小的计算,这种尺寸上的计算分别由各个View自己进行计算得出一个值,每个view的后代根据父亲的尺寸的长宽来计算和调整自己的长宽,特别是一些View的高、宽未定时,需要进行多次比较来决定默认的规则.当计算完所有尺寸后,Layout将根据尺寸绘出具体的位置信息,通常是父亲决定子代的位置和大小.
从上图可以看,Android将界面上的元素是按照一棵树的形状进行组织的,不论是最终图形的展示,还是事件的传播都是基于这个树的.因此,对任何一个界面的绘制,需要决定的就是根节点.通常开发应用界面时,定义界面的LAYOUT,定好好总的LAYOUT之后,再接着定义后面的元素组件如一些Widget.由此可见,Android View及ViewGroup对象实际上是界面UI对象的数据存储,VIEW/ViewGroup对象保存了界面的位置、像素数据等,当这些数据对象与Activity结合时,Activity将会调用setContentView(),根据这些UI数据在一个Canvas桌布上绘制界面.因此,可以说,定义好的一个界面XML文件,实际上是可以被多个不同的Activity使用实例化.
如上图所示,Android使用WindowManager定义一些宽广的属性来控制屏幕,也就是Activity,当Activity要显示一些UI元素时,读取对应用View及VIEWGroup对象就可以了. 写到这里,一些人肯定对其中一些未提及的常见UI元素如对话框、菜单项、弹出提示等,这就是Android程序开发的特殊之处,以前这些都统称为UI元素,但是Android是围绕一个屏幕进行绘制的,因此,Android Activity为这些其它功能提供了特殊的方法.不在View中进行绘制.由Activity负责. 实际上我们随着学习的深入,Android也提供了一些特殊的Activity,比喻说ListActivity直接就实现了LIST的一些功能.所说完全将UI与Activity分开是不可能,但是我们可以这样理解,Activity代表了一个屏幕,这个屏幕中的元素可以采用各种各样的方法进行实现,也就是绘制.但是一定要和这个屏幕关联起来,用户才能看到这个UI. |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |