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实现对显示设备和输入设备的驱动。

image

按照上图的系统分层,从下到上分别是如下一些功能模块:

【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将根据尺寸绘出具体的位置信息,通常是父亲决定子代的位置和大小。

image

从上图可以看,Android将界面上的元素是按照一棵树的形状进行组织的,不论是最终图形的展示,还是事件的传播都是基于这个树的。因此,对任何一个界面的绘制,首先需要决定的就是根节点。通常开发应用界面时,首先定义界面的LAYOUT,定好好总的LAYOUT之后,再接着定义后面的元素组件如一些Widget。由此可见,Android View及ViewGroup对象实际上是界面UI对象的数据存储,VIEW/ViewGroup对象保存了界面的位置、像素数据等,当这些数据对象与Activity结合时,Activity将会调用setContentView(),根据这些UI数据在一个Canvas桌布上绘制界面。因此,可以说,定义好的一个界面XML文件,实际上是可以被多个不同的Activity使用实例化。

image

如上图所示,Android使用WindowManager定义一些宽广的属性来控制屏幕,也就是Activity,当Activity要显示一些UI元素时,读取对应用View及VIEWGroup对象就可以了。

写到这里,一些人肯定对其中一些未提及的常见UI元素如对话框、菜单项、弹出提示等,这就是Android程序开发的特殊之处,以前这些都统称为UI元素,但是Android是围绕一个屏幕进行绘制的,因此,Android Activity为这些其它功能提供了特殊的方法。不在View中进行绘制。由Activity负责。

实际上我们随着学习的深入,Android也提供了一些特殊的Activity,比喻说ListActivity直接就实现了LIST的一些功能。所说完全将UI与Activity分开是不可能,但是我们可以这样理解,Activity代表了一个屏幕,这个屏幕中的元素可以采用各种各样的方法进行实现,也就是绘制。但是一定要和这个屏幕关联起来,用户才能看到这个UI。

你可能感兴趣的:(linux,android,操作系统,C语言,手机)