`
qepwqnp
  • 浏览: 108865 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

Android用户界面详解

阅读更多

这个章节描述怎么实现一个基本的Android界 面。它涉及构建屏幕基本元素,怎么在xml(定义文件)内定义屏幕、用你的代码生成、在不同任务你需要操作你的用户接口。 Android 生成屏幕有三种方式:xml配置生成;通过你自己用户界面接口生成 ; 直接用代码生成 。根据MVC原则,UI应该与程序逻辑相分离,因此,在XML中定义UI结构是高度推荐的。此外,一个程序从一个屏幕方案调整到另一个也容易得多。在XML中定义UI跟创建一个普通的HTML文档非常相似,例如,你有如下的一个文件:

就如Android的XML布局一样,所有的元素都是结构化的,能够通过树形结构来表示:

3.2.1 屏幕元素的层次

Android 应用程序的基础功能单元就是Activity--android.app.Activity类中的一个对象。一个Activity可以做很多事,但是他自 己并不会显示到屏幕上。想要让你的Activity显示在屏幕上并且设计它的UI,你需要使用view和viewgroup-- Android 平台基础的用户界面表达单元。

Views

一个view是一个android.view.View基础类的对象。它是一个存储有屏幕上特定的一个矩形内布局和内容属性的数据结构。一个View对象处理测距和布局,绘图,焦点变换,滚动条,还有屏幕区域自己表现的按键和手势。

View类作为一个基类 , 为 widget(窗体部件)服务,widget--是一组用于绘制交互屏幕元素的完全实现子类。Widget处理它们自己的测距和绘图,所以你可以更快速地 用它们去构建你的UI。可用到的widget包括 Text,EditText,InputMethod,Button,RadioButton,Checkbox,和ScrollVie w ……。

Viewgroups

一个ViewGroup是一个 android .view.Viewgroup 类的对象。正如同它的名字表明的一样,一个viewgroup是一个特殊的view对象,它的功能是去装载和管理一组下层的view和其他 viewgroup,Viewgroup让你可以为你的UI增加结构并且将复杂的屏幕元素构建成一个独立的实体。

Viewgroup类作为一个基类为layout(布局)服务,layout--是一组提供屏幕界面通用类型的完全实现子类。layout让你可以为一组view构建一个结构。

一个树形结构的界面

在Android平台上,你用view树和viewgroup节点来定义一个Activity的UI,就如同下面图表一样。这个树可以如你需要那样简单或者复杂,并且你可以使用Android的预定义widget和layout或者你自定义的view类型来构建它。

一个view和viewgroup树的样例 :

Picture4AndroidUI-Treestructure

要将屏幕绑定一个树以便于渲染,你的Activity调用 它的setContentView()方法并且传递一个参数给根节点对象。一旦Android系统获得了根节点的参数,它就可以直接通过节点来无效化,测 距和绘制树。当你的Activity被激活并且获得焦点时,系统会通知你的activity并且请求根节点去测距并绘制树,根节点就会请求它的子节点去绘 制它们自己 ,同时, 每个树上的viewgroup节点 负责绘制 它的 直接 子节点。

正如之前提到的,每个viewgroup都有测量它的有效空间,布局它的子对象,并且调用每个子对象的Draw()方法去绘制它们自己。子对象可能会请求获得一个它们在父对象中的大小和位置,但是父对象对于每个子对象的大小和位置有最终的决定权。

LayoutParams :一个子对象如何指定它的位置和大小

每个viewgroup类都会使用一个继承于Viewgroup.LayoutParams的嵌套类。这个子类包含了 一系列的属性类型,这些属性类型 定义一个子对象位置和大小, 与 viewgroup类 相适应 。

layoutparams的一个样例 :

要注意的是,每个LayoutParams子类都有它自己赋值的语法。每个子元素必须定义适用于它们父对象的LayoutParams,尽管父对象可能会为子元素定义不同的LayoutParams。

所有的viewgroup都包括宽和高。很多还包括边界的定义(margin和border)。你可以非常精确地描述宽和高,尽管你并不想经常这么做。更多时候你希望你的view自行调整到适应内容大小,或者适应容器大小。

Android界面元素与Swing界面元素的比较

Android界面元素

Swing界面元素

Activities

Frame

Views

Components

TextViews

Labels

EditTexts

TextFields

Buttons

Buttons

Android和Swing的监听者设置也几乎一样:

3.2.2 通用布局对象

下面为在你的应用中为最普遍的viewgroups。这里介绍每种类型的一些基本信息;更深入的细节,请看每章前面的链接参考页。

FrameLayout

FrameLayout 是 最简单的一个布局对象。它被定制为你屏幕上的一个空白备用区域,之后你可以在其中填充一个单一对象—比如,一张你要发布的图片。所有的子元素将会固定 在屏幕的左上角;你不能为FrameLayout中的一个子元素指定一个位置。后一个子元素将会直接在前一个子元素之上进行覆盖填充,把它们部份或全部挡 住(除非后一个子元素是透明的)。

LinearLayout

LinearLayout 以 你为它设置的垂直或水平的属性值,来排列所有的子元素。所有的子元素都被堆放在其它元素之后,因此一个垂直列表的每一行只会有一个元素,而不管他们有多 宽,而一个水平列表将会只有一个行高(高度为最高子元素的高度加上边框高度)。LinearLayout保持子元素之间的间隔以及互相对齐(相对一个元素 的右对齐、中间对齐或者左对齐)。

LinearLayout 还 支持为单独的子元素指定weight。好处就是允许子元素可以填充屏幕上的剩余空间。这也避免了在一个大屏幕中,一串小对象挤成一堆的情况,而是允许他们 放大填充空白。子元素指定一个weight值,剩余的空间就会按这些子元素指定的weight比例分配给这些子元素。默认的weight值为0。例如,如 果有三个文本框,其中两个指定了weight值为1,那么,这两个文本框将等比例地放大,并填满剩余的空间,而第三个文本框不会放大。

下面 的两个窗体采用LinearLayout,包含一组的元素:一个按钮,几个标签,几个文本框。两个窗体都为布局做了一番修饰。文本框的width被设置为 FILL_PARENT;其它元素的width被设置为WRAP_CONTENT。默认的对齐方式为左对齐。左边的窗体没有设置weight(默认为 0);右边的窗体的comments文本框weight被设置为1。如果Name文本框也被设置为1,那么Name和Comments这两个文本框将会有 同样的高度。

在 一个水平排列的LinearLayout中,各项按他们的文本基线进行排列(第一列第一行的元素,即最上或最左,被设定为参考基线)。因此,人们在一个窗 体中检索元素时,就不需要七上八下地读元素的文本了。我们可以在layout的XML中设置 android:baselineAligned="false",来关闭这个设置。

TableLayout

TableLayout 将子元素的位置分配到行或列中。 android 的 一个TableLayout由许多的TableRow组成,每个TableRow都会定义一个row(事实上,你可以定义其它的子对象,这在下面会解释 到)。TableLayout容器不会显示row、cloumns或cell的边框线。每个row拥有0个或多个的cell;每个cell拥有一个 View对象。表格由列和行组成许多的单元格。表格允许单元格为空。单元格不能跨列,这与HTML中的不一样。下图显示了一个TableLayout,图 中的虚线代表不可视的单元格边框。


列可以被隐藏,也可以被设置为伸展的从而填充可利用的屏幕空间,也可以被设置为强制列收缩直到表格匹配屏幕大小。对于更详细信息,可以查看这个类的参考文档。

AbsoluteLayout

AbsoluteLayout 可 以让子元素指定准确的x/y坐标值,并显示在屏幕上。(0,0)为左上角,当向下或向右移动时,坐标值将变大。AbsoluteLayout没有页边 框,允许元素之间互相重叠(尽管不推荐)。我们通常不推荐使用AbsoluteLayout,除非你有正当理由要使用它,因为它使界面代码太过刚性,以至 于在不同的设备上可能不能很好地工作。

RelativeLayout

RelativeLayout 允 许子元素指定他们相对于其它元素或父元素的位置(通过ID指定)。因此,你可以以右对齐,或上下,或置于屏幕中央的形式来排列两个元素。元素按顺序排列, 因此如果第一个元素在屏幕的中央,那么相对于这个元素的其它元素将以屏幕中央的相对位置来排列。如果使用XML来指定这个layout,在你定义它之前, 被关联的元素必须定义。

这是一个RelativeLayout例子,其中有可视的和不可视的元素。基础的屏幕layout对象是一个RelativeLayout对象。

这 个视图显示了屏幕元素的类名称,下面是每个元素的属性列表。这些属性一部份是由元素直接提供,另一部份是由容器的LayoutParams成员 (RelativeLayout的子类)提供。RelativeLayout参数有 width,height,below,alignTop,toLeft,padding和marginLeft。注意,这些参数中的一部份,其值是相对 于其它子元素而言的,所以才RelativeLayout。这些参数包括toLeft,alignTop和below,用来指定相对于其它元素的左,上和 下的位置。

SummaryofImportantViewGroups

重要ViewGroup摘要

TheseobjectsallholdchildUIelements.SomeprovidevisibleUI,andothersonlyhandlechildlayout.

这些对象拥有UI子元素。一些提供可视的UI,另一些只处理子元素的布局。

Class

Description

AbsoluteLayout

可以通过精确的坐标(如屏幕像素)指定子对象相对父容器的位置

FrameLayout

负责显示单一对象的Layout

Gallery

一个以水平滚动方式显示有序图片列表的显示器

GridView

显示一个可滚动的有m列n行的表格

LinearLayout

以水平或垂直方式显示子元素的Layout。如果窗体的长度超过了屏幕的长度,将会出现滚动条

ListView

显示一个可滚动的单列列表

PopupList

一个独立的带边框的元素弹出列表

RelativeLayout

能够指定子对象相对于其它对象(如A在B的左边)或父对象(如在父容器的顶部)的位置

ScrollView

一个垂直的元素滚动列

Spinner

在一个单行文本框中,同时只显示一个有序列表中的一个项。类似于一个可以水平或垂直滚动的单行listbox

SurfaceView

提供直接访问一个可画图的界面。可以控制在界面顶部的子视图层。SurfaceView是提供给需要直接画像素而不是使用窗体部件的应用使用的。

TabHost

提供一个页签选择列表,监视点击并在一个页签被点击时保证应用切换屏幕。

TableLayout

一个拥有任意行和列的表格layout,每一个单元格拥有窗体部份。行会根据最大的列而自动调整大小。单元格边框不可见。

ViewFlipper

一个在单行文本框中同一时刻只显示一项的列表组件。它可以根据时间周期切换显示项,类似一个幻灯机。

ViewSwitcher

类似ViewFlipper

3.2.3 数据绑定

有些Viewgroups会有UI。 这些对象 通常是 AdapterView 类的子类.例如包括 图库和列表视图,它们具有两个共同的职责:

· 填充布局数据

· 处理 用户操作

填充 布局数据

填充布局数据通常通过把这个类绑定到一个 Adapter 来完成,Adapter从某个地方获取它的数据,或者是代码提供的一个列表,或者是来自设备数据库的查询结果。


注意:使用CursorAdapter时,必须有 People._ID ,否则将会发生异常。

处理 用户操作

Android 通过 设置类的AdapterView.OnItemClickListener 成员到一个监听者并 捕捉用户的操作事件 ,来处理用户的操作。

分享到:
评论

相关推荐

    Android用户界面详解.pdf

    在Android开发中,用户界面(UI)的设计是至关重要的,因为它直接影响到用户的体验。本章主要探讨了如何在Android平台上创建和管理用户界面,重点介绍了使用XML进行布局定义以及Activity、View和ViewGroup等核心概念...

    Android_ui.zip_android_android 界面_android ui_android 界面_android

    本资源"Android_ui.zip"包含了一个名为"Android用户界面详解.doc"的文档,它可能详细介绍了Android UI设计的基础知识,帮助开发者学习如何构建Android应用的用户界面。 首先,Android UI由多个组件构成,如布局...

    android 用户界面UI详解

    在Android开发中,用户界面UI(User Interface)是与用户交互的关键部分,它决定了应用程序的外观和用户体验。本文将深入探讨Android UI的构建,包括布局(Layouts)、LayoutParams及其相关概念。 首先,Android...

    android界面布局详解

    Android用户界面主要由View和ViewGroup对象构建。View对象是基本的UI组件,如按钮、文本框等,它们都继承自View类。ViewGroup则是布局的基类,它是一个不可见的容器,用于容纳其他View或ViewGroup,并定义它们的布局...

    Android界面布局详解

    在Android应用开发中,创建直观且响应迅速的用户界面(UI)是至关重要的。本文将深入探讨Android系统提供的五种基本布局类型:LinearLayout(线性布局)、TableLayout(表格布局)、RelativeLayout(相对布局)、...

    android应用开发详解

    Activity是用户界面的主要载体,Intent则负责组件之间的通信,Service用于在后台执行长时间运行的任务,BroadcastReceiver监听系统或自定义广播事件,ContentProvider则管理数据共享。理解这些组件的作用和交互方式...

    Android创意实例详解书籍源码

    1. **UI设计**:源码中可能包含自定义控件的实现,如滑动菜单、轮播图、炫酷过渡效果等,这有助于我们学习如何构建吸引用户的界面。 2. **动画效果**:Android支持多种动画类型,包括视图动画、属性动画等。实例...

    《Android应用开发详解》源码_文档讲解

    《Android应用开发详解源码》目录第1章 Android概述 第2章 Android开发基础 第3章 Android中的资源访问 第4章 Android用户界面 第5章 Android基本程序单元Activity 第6章 Android组件之间的信使Intent 第7章 Android...

    《Android应用开发详解》源码(全章节)

    3. **Activity与Intent**:Activity是Android应用的基本组件,负责用户界面的展示。Intent用于在不同的组件之间进行通信,如启动新的Activity或服务。 4. **布局设计**:XML布局文件在`res/layout`目录下,使用XML...

    android 项目开发详解代码

    "android 项目开发详解代码" 提供了一套完整的开发实例,旨在帮助学习者深入理解Android应用的生命周期、用户界面设计、数据存储、网络通信等核心概念。这份教材通过实际的代码示例,使得理论知识与实践相结合,有助...

    AndroidStudio界面详解.doc

    Android Studio 界面详解 Android Studio 是一个视窗化的开发环境,提供了多种功能丰富的界面元素,以帮助开发者更方便地进行 Android 项目开发。下面对 Android Studio 界面的各个组件进行详细介绍: 1. 主菜单栏...

    Android应用开发详解.pdf

    1. **Activity**:代表用户界面的一个屏幕,是Android四大组件之一,负责处理用户交互事件。 2. **Service**:在后台运行的服务,可以长时间执行任务而不提供界面。 3. **Broadcast Receiver**:用于接收来自系统或...

    Android应用开发详解pdf

    4. **UI设计**:书中将详细介绍如何使用XML布局文件创建用户界面,包括各种控件的使用,如TextView、EditText、Button等,以及布局管理器如LinearLayout、RelativeLayout和ConstraintLayout的运用。 5. **事件处理...

    Android应用开发详解与代码(清晰版)

    5. **Layout设计**:XML布局文件用于定义用户界面的结构,通过各种视图(如TextView、ImageView、Button等)组合,创建出丰富的用户交互界面。 6. **数据存储**:Android提供了多种数据存储方式,如SQLite数据库、...

    Android应用开发详解2010版

    接下来,深入到UI设计,你会学习到Android的布局管理器,如LinearLayout、RelativeLayout、GridLayout和TableLayout等,以及如何使用XML来设计用户界面。此外,还会讨论到View和 ViewGroup的区别与交互,以及自定义...

    Android应用开发详解教材源码(下册)

    4. **布局设计**:Android应用的用户界面主要通过XML布局文件来设计,包括线性布局、相对布局、约束布局等多种布局类型,以及视图控件如按钮、文本框、图片视图等,熟练掌握布局设计能够创建出美观且易用的用户界面...

    Android应用开发详解-附源码

    Activity是用户界面的主要承载者,而Service则可以在后台运行,不依赖于用户界面。BroadcastReceiver用于接收并响应系统或自定义广播事件,ContentProvider则负责数据的存储和共享。 本书详细讲解了Android Studio...

    《Android应用开发详解》PDF

    Android的UI设计是通过XML布局文件实现的,书中会详细讲解各种布局管理器,如LinearLayout、RelativeLayout和ConstraintLayout等,以及如何使用View和ViewGroup来构建复杂的用户界面。此外,还会涉及自定义View的...

Global site tag (gtag.js) - Google Analytics