Android 用户界面(User Interface)概要

在Android应用程序中,使用View和ViewGroup对象来创建用户界面。有很多类型的View和ViewGroup类,它们都是View类的后代。

View对象是Android平台上用户界面的基础单元。View类用于叫做“widgets“子类的基类,它提供了UI对象完全实现,像文本域和按钮。ViewGroup用于叫做“layouts”子类的基类,它提供了不同类型的布局结构,像线性布局、表格布局、相对布局。

一个View对象就是一个数据结构,它的属性保存了屏幕的特定矩形区域的布局参数和内容。View对象会处理它自己的尺寸、布局、描画、焦点变更、滚动和跟驻留在屏幕特定矩形区域交互的键/手势等特性。作为用户界面中的一个对象,一个View也是给用户的一个交互点,并且接受交互的事件。

View的层次结构

在Android平台上,你会像下图显示的那样,使用View和ViewGroup节点的层次结构来定义一个Activity的UI,这个层次结构树能够根据你的需要简化或复杂化,并且你能够使用Android预定义的一组构件和布局来构建UI,或者创建你自己的定制的View。

pic

为了把View层次树展现到屏幕上,你的Activity必须调用setContentView()方法,并且把这个View引用传递给根节点对象。Android系统接受这个引用,并且使用这个引用来废止、计算和绘制新的View层次结构树。层次结构的根节点请求它的子节点依次绘制它们自己。每个ViewGroup节点负责调用它自己的每个子View来绘制它们自己。子节点可以请求它们在父节点中的尺寸和位置,但是父对象能够最终决定每个子节点的大小和位置。Android会依次解析你的布局中的元素(从层次结构树的顶部),实例化View类,并且把它们添加到它们的父容器中。因为这些是依次绘制的,所以如果有位置重叠的元素,那么最后绘制的元素将位于之前在那个位置绘制的对象之上。

布局(Layout)

定义你的布局和表现View层次树的最常见方法是用一个XML布局文件。XML像HTML那样给给布局提供一个可读的结构。XML中每个元素既可以是一个View对象也可以是一个ViewGroup对象(或者是它们的子类)。View对象是层次结构树中的叶子,ViewGroup对象是层次结构树中的分支。

一个XML元素的名字对应了它所代表的Java类的名字,因此一个<TextView>元素要在你的UI中创建一个TextView对象,<linearLayout>元素要创建一个LinearLayout的ViewGroup对象。当你装载布局资源时,Android系统会根据你的布局文件中对应的元素来初始化这些运行时对象。

例如,下例是用文本框和按钮做的一个垂直布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:layout_width="fill_parent"
              android:layout_height="fill_parent"
              android:orientation="vertical" >
    <TextView android:id="@+id/text"
              android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              android:text="Hello, I am a TextView" />
    <Button android:id="@+id/button"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Hello, I am a Button" />
</LinearLayout>

LinearLayout元素包含了TextView和Button对象。你能够在内部嵌套另一个LinearLayout元素(或其他类型的ViewGroup对象),来拉长View的层次结构树,并创建一个更复杂的布局。

有关更多创建UI布局的信息,请看“XML布局”专题

你能有各种方式来布局你UI界面。使用多种不同类型的ViewGroup对象,你能够用无限多的方法来构建子View和ViewGroup对象。Android提供了一些叫做布局的预定义的ViewGroup对象,包括LinearLayout、RelativeLayout、TableLayout、GridLayout等。每个布局组件都提供一组唯一的用于定义子View位置和布局结构的布局参数。

要学习更多的用于布局的不同类型的ViewGroup对象,请看“常用布局对象”专题

构件(Widgets)

一个Widget是一个用于跟用户交互接口的View对象。Android提供了一组完整的Widget实现,如,按钮、检查框、文本输入域等,因此你能够快速的构建你的UI。Android还提供了一些更复杂的Widget,如日期选择器、时钟、缩放控制等。但是你不能限制Android平台提供的Widget类型。如果你更喜欢做一些定制化的事情,并且要创建你自己的可操作的元素,你可以通过定义你自己的View对象或继承合并既存的Widget来达到自己的目的。

在“定制组件”的开发指南中能够读到更多的内容。

android.widget包列出了Android系统提供的全部widget。

输入事件

一旦你给UI添加了一些View/Widget对象,你就可能想要了解有关用户跟它们的交互,以便能够执行一些动作。要获取用户的输入事件,你需要做以下两件事之一:

1.  定义一个事件监听器并且把它注册给View对象。通常,你要关注如何监听事件。View类包含了一组名称是On<something>的监听器嵌套接口,每个都是一个回调方法。例如,View.OnClickListener(针对处理View上的“点击”动作)、View.OntouchListener(针对View内的触屏事件)、View.OnKeyListener(针对View对象内的设备按键事件)。因此如果想要在它被点击时(如一个按钮被选择时)通知View对象,就要实现OnClickListener监听器并定义它的onClick()回调方法(点击按钮时要执行的动作),并且用setOnClickListener()方法把它注册给这个View对象。

2.  重写View类的既存的回调方法。在你实现自己的View类,并且想要监听它内部发生的特定的事件时,就要这么做。例如,你能够处理的事件包括:触屏事件(onTouchEvent())、轨迹球移动事件(onTrackballEvent())、或设备的按键事件(onKeyDown())。这样就允许你在这个定制View类内部给每个事件定义默认的行为,并且决定这个事件是否应该传递给其他的子View。当你建立一个定制组件时,这是你给这个View类再次定义这些回调方法的唯一的机会。

菜单(Menus)

应用程序的菜单使用应用程序UI的另一个重要部分。菜单为展示应用程序功能和设置提供了可靠的接口。常见的应用程序菜单是通过按设备上的菜单按钮来展示的。但是,你也能够添加上下文菜单,可以在在用户按下一个项目时来展示。

菜单也使用View层次结构树的结构,但是你不用自己定义这个结构,相反,你要给你的Activity定义onCreateOptionsMenu()或onCreateContextMenu()回调方法,并且要声明你想要包含这个菜单的菜单项。在适合的时机,Android将会自动给菜单创建必要的View层次结构树,并且绘制菜单中每一项。

菜单也处理它们自己的事件,因此没有必要给菜单项注册事件监听器。当菜单项被选择时,框架将会调用onOptionsItemSelected()或onContextItemSelected()方法。

跟应用程序布局一样,有些在XML文件中声明菜单项时使用的选项。

高级主题

一旦你掌握了创建用户界面的基本知识,你就能够研究一些创建更复杂的应用程序界面的高级特性。

适配器(Adapters)

有些时候,你会想封装一个带有一些非硬编码信息的ViewGroup类,因此,你要把你View类跟外部的数据源绑定。你使用一个AdapterView类作为你ViewGroup,并且每个子View都用Adapter中的数据来初始化和填充。

AdapterView对象是ViewGroup类的一个实现,它基于给定的适配器对象来决定它的子View对象。适配器在数据源(也可能是一个外部字符串的数组)和AdapterView(用于显示数据)之间扮演着一个邮递员的角色,对于特定的任务,Adapter类有几个实现,如针对从Cursor对象中读取数据库数据的CursorAdapter类,或者是针对读取数组数据的ArrayAdapter类。

样式和主题(Styles and Themes)

也许你对标准的Widget外观不满意,你能够创建一些你自己的样式和主题来修改它们。

1. 样式是一组格式属性,你能够在你布局中把它们作为一个单元应用于独立的元素。如,你能够定义一个指定某个文本大小和颜色的样式,然后把它只应用到指定的View元素。

2. 主题也是一组格式属性,但是,你能够把它们作为一个单元应用于应用中的所有Activity,或者只是一个单独的Activity。如,你能给窗口框架和面板背景定义一个设置指定颜色的主题,并且还要设置文本尺寸和菜单颜色。然后这个主题能够应用与指定的Activity或整个应用程序。

样式和主题是资源。Android提供了一些你能够使用的样式和主题,或者你也能够声明你自己定制的样式和主题资源。

在“样式和主题”的专题中会介绍更多的样式和主题的使用方法。

First Edition Build Android Apps That Are Stunningly Attractive, Functional, and Intuitive In today’s crowded Android marketplace, it’s more important than ever to differentiate your apps. Great design is the best way to do that. Now, leading Android app design expert Ian G. Clifton shows you how to make your apps come alive and how to deliver apps that users will want, love, and buy! Reflecting the Android 4.2 SDK, this book serves both as a tutorial for the entire design and implementation process and as a handy reference you’ll rely on for every Android development project. Clifton shows how to create effective designs, organize them into Android components, and move gracefully from idea, to wireframe, to comp, to finished app. You’ll learn how to bring your own voice, personality, and style to your app designs; how to leverage advanced drawing techniques such as PorterDuff compositing; how to test designs on diverse Android devices; and much more. Android User Interface Design details each step of the design and development process and contains extensive downloadable sample code, including complete finished apps. Learn how Android has evolved to support outstanding app design Integrate app design with development, from idea through deployment Understand views, the building blocks of Android user interfaces Make the most of wireframes and prototypes Build efficient layouts and integrate smooth animations Make apps more useful by automatically updating ListViews Combine views into custom components Use image compositing and other advanced techniques Work with the canvas and advanced drawing Leverage Google Play and Amazon Appstore assets One step at a time, this guide helps you bridge the gap between Android developers and designers so you can work with colleagues to create world-class app designs...or do it yourself!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值