零、前言

2007 年 1 月 9 日,苹果正式发布 iPhone,用户界面设计的世界发生了转移。虽然平板电脑已经出现了一段时间,但 iPhone 是第一个给这么多人提供便携式触摸屏的设备,人们喜欢它。一年多后,谷歌和开放手机联盟宣布安卓在许多方面是 iPhone 的直接竞争对手。

我们喜爱的触摸屏手机有哪些特点?答案很简单——反馈。触摸屏提供了一种直接操作屏幕对象的方法,在过去,屏幕对象必须通过键盘、鼠标、操纵杆或其他输入设备来驱动。直接操作的触摸屏模式对我们作为开发人员思考用户界面的方式有很大影响,并改变了用户对应用的期望。触摸屏设备要求我们停止思考形式,开始思考面向对象的用户界面。

安卓被用作快速扩展的消费电子产品系列的主要操作系统,包括:

  • 智能手机
  • 上网本
  • 药片
  • 一些桌面系统

虽然所有这些设备都有不同的用途和规格,但它们都运行安卓系统。这与许多其他几乎总是有特殊目的的操作环境不同。他们提供给开发人员的服务和应用编程接口通常反映了他们的目标硬件。另一方面,安卓系统假设一个应用可能需要在许多不同类型的设备上运行,具有非常不同的硬件功能和规格,并使开发人员尽可能容易地简单而优雅地处理这些设备之间的差异。

新挑战

随着安卓及其支持的触摸屏设备变得越来越普遍,它们将给用户界面设计和开发带来一系列新的挑战:

  • 你通常没有老鼠
  • 您可能有多个指点设备
  • 你通常没有键盘
  • 任何存在的键盘都可以是软件键盘
  • 软件键盘可能会占用应用的一些屏幕空间

软件键盘减少了应用可用的屏幕空间,同样,如果存在硬件键盘,它可能会也可能不会总是暴露给用户。因此,不同的安卓设备不仅不同,而且在您的应用运行时,它们可能会改变功能。

手指的规则

大多数安卓设备都有触摸屏(尽管这不是必需的)。任何触摸屏用户界面的第一个限制是人的食指大小,当然每个人的食指大小差异很大。如果小部件在屏幕上太小,用户试图触摸的东西就不清楚了。您会注意到,大多数安卓小部件占用了大量空间,并且周围的填充量超过了正常水平。在触摸屏设备上,你不能依赖像素级的精度。您需要确保当用户触摸一个小部件时,他们会进行接触,并且不会意外触摸另一个小部件。

神奇的触摸

触摸屏对用户界面设计的另一个影响是,一个应用和它使用的所有小部件必须完全不言自明(甚至比平常更多)。太多时候,我们用滚动或工具提示来代替好的用户界面规划和设计来指示小部件的功能。在触摸屏设备上,没有鼠标或定点设备。它与用户的第一次交互是当他们触摸它时,他们会期望发生一些事情。

类型

敏感话题

大多数安卓设备都有触摸屏,但这不是必需的。触摸屏的质量也因设备而异。触摸屏的类别及其功能也将因设备而异,这取决于设备的预期用途,通常还取决于其预期的细分市场。

对世界的小看法

大多数安卓设备都很小,因此比普通的电脑或笔记本电脑屏幕更小,像素也更少。这种尺寸的缺乏限制了小部件的尺寸。小部件必须足够大才能安全触摸,但我们也需要将尽可能多的信息打包到屏幕上。所以不要给你的用户他们不想要的信息,也要避免向他们询问你不需要的信息。

经典用户界面原则

以下是每个用户界面都应该遵循的一些核心准则。这些指导方针会让你的用户满意,并确保你的应用成功。在本书的其余部分,我们将通过用户界面改进的实际例子来介绍这些指南。

一致性

这是良好用户界面设计的基石。一个按钮应该看起来像一个按钮。确保每个屏幕的布局都与应用中的其他屏幕有关系。人们常常把这个原则误认为“坚守平台观感”。观感很重要,一致性大多适用于应用的布局和整体体验,而不是配色方案。

回收你的界面

保持一致的用户界面最简单的方法是尽可能多地回收它。乍一看,这个建议看起来仅仅是一个“好的面向对象”的实践。然而,仔细观察会发现以你没有想到的方式重用图形小部件的方法。通过更改各种小部件的可见性,或者您可以重用编辑屏幕来查看所需类型的列表项。

简单

这在基于电话的应用中尤其重要。通常,当用户遇到一个新的应用时,那是因为他们在寻找什么。他们可能没有时间(或者更多时候没有耐心)去学习一个新的用户界面。确保您的应用要求尽可能少,并在尽可能少的步骤中引导用户找到他们想要的确切信息。

禅的方法

一般来说,当你使用移动设备时,你的时间是有限的。您也可能在不太理想的情况下使用应用(可能是在火车上)。用户需要向应用提供的信息越少,他们需要从中吸收的信息越少越好。剥离选项和信息也会缩短学习曲线。

安卓的隐藏菜单

安卓的一个非常有用的特性是隐藏菜单结构。只有当用户按下“菜单”按钮时,菜单才可见,这通常意味着他们在寻找当前不在屏幕上的东西。通常,用户不需要打开菜单。然而,这是一种隐藏高级特性直到需要它们的好方法。

反馈

反馈是触摸屏设备令人兴奋的原因。当你拖动一个物体时,它会在屏幕上粘在你的手指上,直到你放开它。当用户把他们的手指放在你的应用上时,他们期待一些反应。然而,你不想妨碍他们——与其在他们触摸按钮时显示错误信息,不如禁用按钮,直到它可以有效使用,或者根本不显示它。

位置和导航

当你在一个你从未去过的地方时,很容易迷失方向或迷路。一个软件也是如此。仅仅因为应用对开发人员来说有意义,并不意味着它对用户来说是合乎逻辑的。添加过渡动画、面包屑和进度标尺有助于用户识别它们在应用中的位置以及正在发生的事情。

复苏之路

告诉用户桌面应用或网络出现问题的一种常见方法是打开一个错误对话框。在移动设备上,人们希望更流畅地使用应用。在普通应用中,您可能会通知用户他们选择了无效选项,而在移动应用中,您通常希望确保他们不能首先选择该选项。另外,不要让他们滚动巨大的选项列表。相反,允许他们使用自动完成或类似的方式筛选列表。

当出现问题时,要友善,要乐于助人——不要告诉用户,“我找不到任何航班供你搜索”。相反,告诉他们,“没有可供您搜索的航班,但是如果您准备提前一天离开,这里有一个可用航班的列表”。始终确保您的用户可以向前迈出另一步,而不必“后退”(尽管后退的选项应该始终存在)。

安卓道

安卓平台在许多方面类似于为网络开发应用。有许多设备,由许多制造商制造,具有不同的能力和规格。然而,作为一名开发人员,您会希望您的用户拥有尽可能一致的体验。与网络浏览器不同,安卓内置了处理这些差异的机制,甚至可以利用它们。

我们将从用户的角度来看待安卓,而不是纯粹以开发为中心的方法。我们将涵盖以下主题:

  • 安卓提供了哪些用户界面元素
  • 安卓应用是如何组装的
  • 不同类型的安卓布局
  • 向用户呈现各种类型的数据
  • 定制现有的安卓小部件
  • 保持用户界面美观的技巧和工具
  • 应用之间的集成

我们即将开始为安卓设备构建用户界面——所有安卓设备,从最高速度的中央处理器到最小的屏幕。

这本书涵盖了什么

第 1 章开发一个简单的活动从一个简单的用户界面开始,介绍了构建安卓应用的基础知识。它还涵盖了在将设计实现为代码时您可以使用的各种选项。

第 2 章带适配器的视图向我们展示了如何利用基于适配器的小部件,这是安卓对模型-视图-控制器(MVC)结构的回答。了解这些小部件,以及它们最适合您的地方。

第 3 章专门的安卓视图详细介绍了安卓平台提供的一些更专门的小部件,以及它们与普通小部件之间的关系。本章涵盖了诸如图库和分级栏等小部件,以及如何使用和设计它们。

第 4 章活动和意图讨论了更多关于安卓如何运行你的应用,以及从这个角度来看,如何最好地编写它的用户界面。本章介绍如何确保您的应用以用户期望的方式运行,而您只需付出最小的努力。

第 5 章 - 线性布局介绍了安卓提供的一些高级布局技术。它谈到了向用户呈现不同屏幕的最佳方式,同时考虑到安卓设备上屏幕的巨大差异。

第 6 章输入和验证提供了关于从用户处获取输入以及如何尽可能保持这种体验无痛的提示。本章研究了安卓提供的不同输入小部件,以及如何根据情况对它们进行最佳配置。此外,当其他一切都失败时,如何最好地通知您的用户他们正在做的事情是错误的。

第 7 章激活小部件和布局将告知读者在哪里、何时、为什么以及如何激活你的安卓用户界面。它还揭示了默认情况下提供什么样的动画,如何将它们组合在一起,以及如何构建自己的动画。本章着眼于动画在移动用户界面中的重要性,并展示了安卓如何使复杂的动画变得容易。

第八章内容 - 中心设计详细介绍了在屏幕上为用户呈现信息时,如何着手设计屏幕布局。本章讨论安卓提供的一些不同显示技术的优缺点。

第 9 章设计安卓应用向我们展示了如何保持整个应用的外观一致,以使我们的应用更容易使用。

第 10 章构建应用主题关注设计过程,以及如何应用应用范围的主题来帮助您的应用脱颖而出。

这本书你需要什么

请看一下安德伍德开发者网站http://developer.android.com/sdk/requirements.html上提到的“系统需求”。

本书的代码在 Ubuntu Linux 10.04 和 Mac OS X 上进行了测试。

这本书是给谁的

这本书面向的是至少有一些 Java 经验的开发人员,他们希望在安卓平台上构建应用。它还将对那些已经在安卓平台上开发了应用并希望获得关于其用户界面设计的更多知识的人有用。它也将是安卓平台提供的众多小部件和资源结构的有益参考。

这本书还将有助于:

  • 学习安卓开发的 Java 开发人员
  • 寻求拓宽技能组合的 MIDP 开发商
  • 想要移植应用的 iPhone 开发者
  • 想要扩大用户基础的创业型安卓开发者

惯例

在这本书里,你会发现几个标题经常出现。

为了给出如何完成程序或任务的明确指示,我们使用:

行动时间-航向

  1. 在编辑器或 IDE 中打开res/layout/main.xml布局资源。
  2. 删除LinearLayout元素中的默认内容。

指令通常需要一些额外的解释,这样它们才有意义,所以它们后面跟着:

刚刚发生了什么?

本标题解释了刚刚完成的任务或指令的工作。

你还可以在书中找到一些其他的学习辅助工具,包括:

突击测验–标题

这些是简短的选择题,旨在帮助你测试自己的理解。

加油英雄——前进

这些设定了实际的挑战,并给了你尝试你所学的想法。

您还会发现许多区分不同类型信息的文本样式。以下是这些风格的一些例子,以及对它们的含义的解释。

文本中的码字如下所示:“我们将从创建一个选择器Activity和一个简单的NewsFeedActivity开始。

代码块设置如下:

<activity
    android:name=".AskQuestionActivity"
    android:label="Ask Question">

    <intent-filter>
        <action android:name="questions.askQuestion"/>
        <category android:name="android.intent.category.DEFAULT"/>
    </intent-filter>
</activity>

当我们希望将您的注意力吸引到代码块的特定部分时,相关的行或项目以粗体显示:

<?xml version="1.0" encoding="UTF-8"?>
<FrameLayoutxmlns:android="http://schemas.android.com/apk/res/android"
         android:layout_width="fill_parent"
         android:layout_height="fill_parent">

 <ViewStub android:id="@+id/review"
 android:inflatedId="@+id/inflated_review"
 android:layout="@layout/review"/>

 <ViewStub android:id="@+id/photos"
 android:inflatedId="@+id/inflated_photos"
 android:layout="@layout/photos"/>

 <ViewStub android:id="@+id/reservations"
 android:inflatedId="@+id/inflated_reservations"
 android:layout="@layout/reservations"/>
</FrameLayout>

任何命令行输入或输出都编写如下:

android create project -n AnimationExamples -p Anima
tionExamples -k com.packtpub.animations -a AnimationSelector -t 3

新名词重要词语以粗体显示。你在屏幕上看到的单词,例如在菜单或对话框中,出现在这样的文本中:“一般来说,如果用户点击购买音乐按钮,而不是突然被带到他们的网络浏览器,他们更倾向于感受到一种信任感”。

警告或重要提示会出现在这样的框中。

类型

提示和技巧是这样出现的。

读者反馈

我们随时欢迎读者的反馈。让我们知道你对这本书的看法——你喜欢或可能不喜欢什么。读者反馈对我们开发您真正能从中获得最大收益的标题非常重要。

要给我们发送一般反馈,只需向<[feedback@packtpub.com](mailto:feedback@packtpub.com)>发送电子邮件,并通过您的消息主题提及书名。

如果您需要一本书并希望看到我们出版,请在【www.packtpub.com】的建议标题表格中或通过电子邮件<[suggest@packtpub.com](mailto:suggest@packtpub.com)>给我们发一封短信。

如果你对某个主题有专业知识,并且对写作或投稿感兴趣,请参阅我们在www.packtpub.com/authors上的作者指南。

客户支持

现在,您已经自豪地拥有了一本书,我们有许多东西可以帮助您从购买中获得最大收益。

类型

下载本书示例代码

您可以从您在http://www.PacktPub.com的账户中下载您购买的所有 Packt 书籍的示例代码文件。如果您在其他地方购买了这本书,您可以访问http://www.PacktPub.com/support并注册,以便将文件直接通过电子邮件发送给您。

勘误表

尽管我们尽了最大努力来确保我们内容的准确性,但错误还是会发生。如果你在我们的某本书里发现了错误——可能是文本或代码中的错误——如果你能向我们报告,我们将不胜感激。通过这样做,你可以让其他读者免受挫折,并帮助我们改进这本书的后续版本。如果您发现任何勘误表,请访问http://www.packtpub.com/support,选择您的书籍,点击勘误表提交表链接,并输入您的勘误表的详细信息。一旦您的勘误表得到验证,您的提交将被接受,勘误表将上传到我们的网站上,或添加到该标题的勘误表部分下的任何现有勘误表列表中。通过从http://www.packtpub.com/support中选择您的标题,可以查看任何现有的勘误表。

盗版

互联网上版权材料的盗版是所有媒体的一个持续问题。在 Packt,我们非常重视版权和许可证的保护。如果您在互联网上遇到任何形式的我们作品的非法拷贝,请立即向我们提供位置地址或网站名称,以便我们寻求补救。

请通过<[copyright@packtpub.com](mailto:copyright@packtpub.com)>联系我们,获取疑似盗版资料的链接。

我们感谢您在保护我们作者方面的帮助,以及我们为您带来有价值内容的能力。

问题

如果您对本书的任何方面有问题,可以在<[questions@packtpub.com](mailto:questions@packtpub.com)>联系我们,我们将尽最大努力解决。