为日渐成熟的Android做设计

【声明】 本篇博文英文版原文来自Smashing Magazine,本人经Smashing Magazine邮件授权后翻译,转载请注明出处。谢谢!原文地址。 我将不定期翻译优秀外语博文,也欢迎大家关注我的非技术博客

  Android用户量非常庞大:有4.8亿用户正在使用Android设备,每天还有1百万的新设备被激活。几乎每三周,新增的激活Android设备的用户数量就相当于澳大利亚的全部人口数目。(Nielsen最近的研究表明在市场上激活的Android设备已经多于IOS设备。)

  流行的app依靠发布Android版本正在获取极大的用户增长。例如,Instagram在启用其Android版本app之后,仅在10天内,就收获了1千万用户。

  尽管这个平台正在经历空前的增长,然而大部分Android应用却......额,不是非常棒。与iTunes Store相比,Google Play市场中仅有很少数的高质量应用。其中一个原因是Android在过去几年仍在经历其青春期。它曾经无组织并且不稳定,很多设计人员都避开它————甚至讨厌它————并且很自然地被iOS所吸引。

  Android平台一些问题已经不再存在,但遗留的问题却把事情搞大了。对于那些存在的问题,我们将提供指引,如何处理它们、如何开始设计你的第一个伟大的Android应用。

【青春期的症状】

  许多Android应用表现不佳的原因在于,这个平台还没有成熟到让优秀应用浮出水面。虽然这个强大的实验室————以自由和开放的态度允许制造商和开发者创建任何他们想要的东西————并不太想每天都在沙盒环境中运行。但这个沙盒却被看做是优秀设计的基础部分。

  以下列举了你或许仍然记得的一些Android的细节————这些细节也也许限制了你想要使用Android的渴望————但这些问题已经都被解决或改善。如果这个列表中有你关注的部分,那么后面的章节会告诉你它们是如何被日渐完善的Android系统修正,并且最终告诉你如何设计一个更好的Android应用。

Google的原生应用缺少一致性

不久以前,几乎所有Google自家的Android应用都各长各样。

Google花了一年多时间才开始遵守自己推行的设计建议。action bar设计模式早在2010年就被展现给世人(Google I/O 2010)但直到2011年十月Android4.0的发布才正式被应用。

Android社区缺少以用户为中心的设计文化

由于自家应用的不一致,Google没有成功的给其他开发者树立榜样,而且官方也缺少关于一致性的设计指导和设计模式,这导致了另一个更严重的问题:糟糕的用户体验。好的设计以人为本;撬动科技的杠杆来帮助用户完成他们自身的目标。在这一点上,Google没有和开发人员维持清晰的沟通(Apple则不同)。

不同设备和OS版本之间戏剧性的不一致体验

制造商通常定制设计系统的UI和硬件按钮。这导致了碎片化,让测试工作和质量控制更为艰难、应用设计的一致性几乎不再可能。

制造商习惯把硬件按钮按不同顺序摆放。更换设备将会是个悲桑的故事。

  在不断变更且快速发展的市场中,开发者想要对应用进行正确的测试是困难的。因此,大多数应用并没有像他们本应该的方式运作或是压根就是被糟糕的设计出来。

这些应用仍然存在于市场中,但是你不必成为其中一个。Android已经有了改善,让你有机会为用户创造出更好的、更一致性的体验。

【Android已经长大】

  如今Android的用户体验比以往任何时候都更好,使得app设计人员和开发人员更容易制作出优秀的应用。然而一些早期的问题仍然存在,大多数变得更易控制,更多已经被一起解决了。

  然而,一个根本的问题仍然存在:没有足够多的优秀应用。但随着Android平台的不断改进和成熟,设计人员和开发人员可以解决这个问题。我们所要做的就是再给Android一次机会。

以下领域是成熟的Android平台需要提供的:

发掘更好的应用

在过去,发现应用的过程被局限在通过键盘输入搜索,然后尝试所有的返回结果。新的Google Play商店通过特色应用和官方人员挑选来提供更好搜索体验。

与它的前辈Android Market相比,新的Google Play商店提供了更多方式来发现炫酷的新应用。

恰当的Android设计指南

此前,开发应用需要的基本元素的设计指导是不存在的。但Google发布的设计指南,将细微的设计决定权从应用设计人员和开发人员身上移走。我们终于能专注在想要创建的应用的核心价值上,并且保证了跨设备的一致性体验。

举例:grid结合48分辨率无关的像素布局。摘自设计指南的“Metrics and Grids”章节。

抛弃菜单和搜索的物理按键

Google开始将硬件按钮从设备上移除,硬件和软件的融合将使得Android设备更加优雅和易用。

Nexus 4是Google对硬件按钮进行尝试的例子。(这些按钮)总是放在这个位置,总是按照这个顺序摆放。搜索和菜单按钮则被移除。

Android设备总类的多样化仍然存在(例如,LG仍然生成配有物理Menu按钮的Android4.0设备),然而多样性也是Android应用能够脱颖而出的原因。

【碎片化并非一无是处】

  碎片化也许是设计者和开发者面对的最大的遗留问题,且这是根植在Android的DNA中的————Android体验中永远会遇到的问题。这种多样性为设计人员提供了感受全球范围内史无前例的用户数量的机会。

  学习如何与碎片化共处将使你成为更好的设计者和开发者,并使你得到更广阔的的知识水平并精进你的技能范围。为了这些回报,是值得去接受挑战的。为了在工作中取得成功,这里有一些当开发Android应用时需要记在脑中的建议。

【创造成功Android应用的建议】

1.了解Android

要做到了解Android,你需要去学习如何使用它并了解它的用户们。最好的方式是买几个不同制造商生产的设备,具备不同的屏幕尺寸甚至不同的系统版本。这些设备不仅会帮助你理解用户多样性,也能用来测试你的应用。

要为你的应用选取最好的设备,查看最新的Google的统计数据选择一个满足你需要的设备。第三方的数据,例如OpenSignal在2012年8月的报告,也可以帮助你选择设备。

要牢记的是Android更新是由服务提供商控制的,结果就是,更新通常更早出现在Google的合作商制造的设备上,例如Nexus系列。拥有最新的Nexus设备使你站在平台更新的最前沿。你可以购买二手设备来省钱,但付款前一定确保它运行着你想要的系统版本(许多老设备很久都没有升级过)。

跟你周围使用Android的朋友谈谈他们的使用感受以及他们感到满意和不满意的地方。这会帮助你理解整个环境并助你熟悉其文化。

2.遵从设计指南

遵从设计指南能帮助你创建出在任何设备上都较为原生的应用。但这只是遵从指南的其中一个原因。指南还能帮助你收获如下好处:

  • 创建一个几乎适用所有设备的应用
  • 使应用更贴近Android系统
  • 为用户提供熟悉的UI
  • 使应用更易开发和维护
  • 增加应用被Google Play推荐的机会

牢记Android导航栏样式并使用贴近平台的控件也会助你创造跨平台的一致体验。

当把iPhone的设计(左图)带入Android(右图),使用平台原生的控件:这个table视图是Android的样式;搜搜和添加内容的按钮被移动到底部split action bar;视图的切换是由view control来完成。

定制的应用不仅难在维护,更难在为保障跨平台而作的设计上。新的Android应用因为设计指南的缘故看上去美观,但与Android 4.0以前的应用有着很大的不同。

3.理解Android的样式和感受

Google为了使旗下各产品具备统一的视觉体验投入了大量的努力,包括Android。Android 4.0呈现了自己特有的风格:简单,朴实,干净————更多的是功能上而非形式上。

尽管这提供了样式上的极大自由,你仍然需要琢磨Android微妙的视觉风格:saying more with less。简单的从iOS应用上把样式抄过来也许不再合适。发布一个老样式的应用或使用那些看起来像另一个平台的视觉元素将会收获用户消极的反应。————这正是微软遭遇的问题

浏览Android Niceties是感受Android样式、收获灵感的好办法。

Google的搜索应用是一个感受Android样式的好范例。

一个让区分你的应用的好方法是通过图标。Android应用的图标可以使用任何形状和形式。用户喜欢精美的图标并会很乐意把你的应用放在他们的主屏幕上即便他们并不是很常用。关于设计图标的建议,参见设计指南中“Iconography”章节。

Android应用图标可以是你想要的任何形状和形式。

4.为不同硬件类型进行打包

设计应用时,确保它能在尽可能多的设备上正确运行。要记住不仅仅是屏幕尺寸和长宽比,还有低亮度或低对比度的屏幕,也就是慢而弱的硬件配置。

例如,廉价的设备往往具备更小的显示屏和更低的对比度,所以在新设备上显得足够大的文字在这会变得模糊。文字和视觉元素的低对比度也会损害用户体验。

遵从设计指南做出来的设计将会很容易的适应几乎各种屏幕。

一些需要记住的事情:

  • 对文字和元素使用对比色。例如,灰色背景下,重要的元素不要使用白色。它们会混在一起影响显示。
  • 在不同明亮度设置(低,高,自动)和不同照明条件下检查你的设计。
  • 即便使用标准尺寸,确保你的文字和UI元素在小屏幕上足够大(例如,DPI低于240的屏幕)。你也许需要专门为小屏幕设备进行调整。

关于多样性大量优秀设计,参见Sebastiaan de所描述的开发闹钟项目的过程。

5.使用屏幕密度不相关的像素来定义布局

要提供一致性的体验,其中一点是保证UI元素在各种PPI下看起来基本一样。这并不是个艰难的任务、需要计算按钮的像素大小或字体应当多大才能在特定的屏幕上看起来美观。你可以让手机来做为你这些工作。

action bar中推荐的按钮大小是48DP,在不同屏幕下会变成不同的像素尺寸,但不需要为此担忧。

使用DPs来定义大小,可以保证元素在各种屏幕上具备相同的绝对大小。文字仍然刻度,但按钮将会在任何And设备上都变得易用,无论是哪种屏幕尺寸或DPI。(参见设计指南的“Use Density-Independent Pixels”章节获取更多信息。)

在我们实践中,对元素和字体大小遵从开发指南被证实是有用的。

6.为所有densities创建素材资源

为了适应所有Android设备必须要有4种素材集合:低密度(LDPI),中密度(MDPI),高密度(HDPI)和超大密度(XHDPI)。XHDPI具备640*960的素材,其余逐渐减小。

各种素材尺寸的对比。

MDPI和XHDPI分辨率与iPhone常规屏幕和Retina屏幕分辨率大小完全一致。所以,如果你有一个iPhone的设计,你可以使用它作为Android样式的副本,或者直接放到iPhone或iPod上检验设计。但不要忘记Android独一无二的观感。

为了支持下一代的移动设备。XXHDPI也已经加入,大致接近480DPI屏幕。虽然还没有这种设备存在,但如今10英寸的XHDPI屏幕上应用图标会使用XXHDPI,例如Nexus 10。(由于这些设备太大了,启动图标被放大,并放进XHDPI素材文件夹。)为了适应下一代屏幕,你需要做的仅仅是把HDPI素材放大到200%。

7.考虑不同的系统版本

许多Android设备压根不会升级至最新的系统版本,新版本系统需要好几年的时间才能在市场中占主要地位。但新版本的用户不喜欢应用看上去或操作起来像过时的一样。因此,尽可能的提供流行的体验。如果你想要应用跑在老版本上,为这些设备创造一个单独的应用版本。

8.将应用延伸到widget和动态壁纸

充分利用Android的迷人特性,例如widgets,动态壁纸和通知栏。Widgets使用户不需要运行应用就能收到更新后的信息,而通知栏则随着Android版本的升级不断被改善。Google就如何通知用户为设计者和开发者提供了极大的支持。

Widgets是不打开应用就看到信息的便捷方式。这使得你能使用部分信息就抓住用户的注意力,而促使用户进入应用查看完整信息。

Widgets可以有按钮和滚动空间。不妨把它当做高级的应用图标。

Gmail的widget提供了邮箱的快览并且允许用户在主屏幕写邮件。Chrome的grid视图widget展示了收藏或历史页面。

9.在你想支持的设备上做测试

在Play商店上得到负面评论的主要原因是因为app没有按照预想的方式运行。把设计的对象聚焦在主流的设备上,并且只对测试过的机型发布。否则,你的努力将在用户抱怨你的应用不正常运作中告终。

非常成功的游戏 死亡空间 收获的一星评价中,绝大多数是由于游戏无法再特定的设备上运行。

10.为平板做设计

虽然市场上已有几款优秀的Android平板,但并没有其竞争者iPad那样受欢迎。但如果你的目标是构建一款真正通用的Android应用,那么你也需要考虑一下平板设备。设计指南建议设计者使用multi-pane layouts并使用fragments控件来为平板做设计。

平板应用使用与手机应用一样的素材资源,但要考虑平板使用的上下文环境。例如,与手机相比,用户往往把平板摆在离眼睛更远的地方,那么,敲击时将变得不够精确。所以,UI需要更大的字体,更大的按钮且控件周围要有更多的留白。

别忘了把你的应用过一遍这个列表“Tablet APP Quality Checklist

【给Android一个机会】

为Android进行设计在初期也许是个挑战—————它并不像看起来那样简单————但听从这10项建议,你将着眼于传递美妙用户体验并生产出真正伟大的应用。

给Android一个机会。为这个新鲜成熟的平台做设计是一件有趣而富有教育意义的过程,你将在创造出美观应用的同时收获到许多新的技能。你会发现这个过程非常值得回味。

一些精致优秀的Android应用

【译】Design For Maturing Android-为日渐成熟的Android做设计的更多相关文章

  1. Android开发学习之路-Android Design Support Library使用(CoordinatorLayout的使用)

    效果图: 上面的这个图有两个效果是,一个是顶部的图片,在上滑之后会隐藏起来并且显示出一个ToolBar(ToolBar类似于ActionBar,但是只有ToolBar是兼容Material Desig ...

  2. Android Material Design(一)史上最全的材料设计控件大全

    主要内容: 本文将要介绍Material design和Support library控件,主要包括TextInputLayout.SwitchCompat.SnackBar.FloatingActi ...

  3. ANDROID Porting系列一、ANDROID编译系统

    译自:http://source.android.com/porting/build_system.html Android使用一个自定义生成系统生成工具,二进制文件和文档.本文档提供了一个建立And ...

  4. 【我的Android进阶之旅】Android 混淆文件资源分类整理

    之前将所有的混淆都配置在一个 proguard-rules.pro 这个Android Studio新建项目时自动生成的文件里面,而随着项目功能迭代越来越多,代码量越来越多,引用的第二方库.第三方库都 ...

  5. [Android实例] 最全的Android开发资源整理--进阶必备

    本帖最后由 一切随枫 于 2014-6-9 12:08 编辑 原文链接: http://stormzhang.github.io/android/2014/06/05/android-awesome- ...

  6. 【我的Android进阶之旅】Android插件化开发学习资料

    1.目前开源的插件开发框架大致有哪些? 1. 任玉刚 的 dynamic-load-apk Github 地址:https://github.com/singwhatiwanna/dynamic-lo ...

  7. <Android开源库 ~ 1> GitHub Android Libraries Top 100 简介

    转载自GitHub Android Libraries Top 100 简介 本项目主要对目前 GitHub 上排名前 100 的 Android 开源库进行简单的介绍, 至于排名完全是根据 GitH ...

  8. Android SDK上手指南 2:用户界面设计

    http://mobile.51cto.com/ahot-419184.htm 内容简介 我们将为应用程序项目添加布局方案,在这方面XML与Eclipse ADT接口将成为工作中的得力助手——不过在后 ...

  9. Android Google 地图 API for Android

    从健康类 app Runkeeper 到游戏 app 精灵宝可梦,位置服务对现代 app 来说越来越重要. 在本文中,我们将创建一个 app,名字就叫做 City Guide.这个 app 允许用户搜 ...

随机推荐

  1. iOS中发送HTTP请求的方案

    在iOS中,常见的发送HTTP请求的方案有 苹果原生(自带) NSURLConnection:用法简单,最古老最经典的一种方案 NSURLSession:功能比NSURLConnection更加强大, ...

  2. NSTimer scheduledTimerWithTimeInterval与timerWithTimeInterval、initWithFireDate的区别

    英文原文是这样的: A timer object can be registered in only one run loop at a time, although it can be added ...

  3. 通过StoryBoard加载视图控制器问题

    如果通过拉线的方式拉进来一个UIViewController,再将它绑定一个UIViewController类.创建的时候通过alloc,init创建出来并不会创建出一个你拉进来的UIViewCont ...

  4. 最新Burpsuite Pro v1.7.03 介绍和破解版下载

    0x00 介绍 Burp Suite 是用于攻击web 应用程序的集成平台.它包含了许多工具,并为这些工具设计了许多接口,以促进加快攻击应用程序的过程.所有的工具都共享一个能处理并显示HTTP 消息, ...

  5. openstack 上床镜像, 创建网络, 创建虚拟机 命令

    ==================================================================================================== ...

  6. 用java程序输出自己的姓名

    代码部分: public class Hello { public static void main(String[] args) { System.out.println("$$$$$$$ ...

  7. MongoDB学习笔记——聚合操作之聚合管道(Aggregation Pipeline)

    MongoDB聚合管道 使用聚合管道可以对集合中的文档进行变换和组合. 管道是由一个个功能节点组成的,这些节点用管道操作符来进行表示.聚合管道以一个集合中的所有文档作为开始,然后这些文档从一个操作节点 ...

  8. PHP模拟发送POST请求之四、加强file_get_contents()发送POST请求

    使用了笨重fsockopen()方法后,我们开始在PHP函数库里寻找更简单的方式来进行POST请求,这时,我们发现了PHP的文件函数也具有与远程URL交互的功能. 最简单的是fopen()和fread ...

  9. java使用httpcomponents 上传文件

    一.httpcomponents简介 httpcomponents 是apache下的用来负责创建和维护一个工具集的低水平Java组件集中在HTTP和相关协议的工程.我们可以用它在代码中直接发送htt ...

  10. Hadoop with tool interface

    Often Hadoop jobsare executed through a command line. Therefore, each Hadoop job has to support read ...