热门标签 | HotTags
当前位置:  开发笔记 > 运维 > 正文

软件操作界面设计须遵循的一些原则

我们做界面设计的目的是去给用户的工作积极的支持而不是相反把无意义的东西强加于人。界面在用户和他们要完成的任务之间应该是透明的,而且是高效、舒适、让人心情愉悦的。下面介绍的是几个保证软件界面设计成功的基
我们做界面设计的目的是去给用户的工作积极的支持而不是相反把无意义的东西强加于人。界面在用户和他们要完成的任务之间应该是透明的,而且是高效、舒适、让人心情愉悦的。下面介绍的是几个保证软件界面设计成功的基本原则。

简单:不要在功能的可用性上妥协保持界面简洁直观。用户需要易于理解和操作的功能。在一个组织糟糕的界面上,用户被大量高级功能所困扰,而无法直接的去使用最常用的功能。而一个组织有序的界面会把用户要完成的任务结合到背景中去,让用户能更有效的操作。最基本的功能应该让人可以立刻看到,而那些高级功能对于新用户来说可以不那么明显。只有经过任务分析而确定的必要的功能才应该被放到界面上。要让用户尽可能的使用最少的功能,经过最少的步骤完成他们的任务。

支持:把控制权交给用户并且提供提示性帮助,把系统的控制权交给用户,允许他们使用在日常生活中习惯的各种步骤完成他们的任务,不要用你主张的所谓“正确”的操作步骤去人为的限制用户的操作。系统应该允许用户建立并且维护自己的工作环境。系统的当前状态和能够被使用的操作应该有明确的标示。系统应该允许用户离开,并为他们保留离开时的工作状态。提供有关联的工作环境会使用户对系统有稳定的感觉。大部分用户都需要完成很多任务,在某些方面他们可能是专家,但在另外的方面,他们则可能是个新手。要做到在用户需要的时候能及时提供帮助,系统就应该理解并预计到用户的目的,然后再协助他们更轻松的完成任务。理想的帮助系统应该教给用户能够快速完成任务的知识。帮助系统应该在用户选择要独立完成一些任务的时候教会他们。

相似:建立在用户已有的经验上允许用户根据以往的经验操作系统,特别是他们从现实世界中获得的经验。这些经验的一小部分,被引用到交互界面中来,也将对用户完成大量的任务有很大帮助。通过一次学习获得的概念和技术应该能被应用在各种环境下。用户不应该为完成相似的任务而去学习新的东西。在交互界面中采用用户已经在现实世界里学到的概念和技术,可以让他们立刻在计算机上开始工作并确保进展顺利。

隐喻的技巧曾经被用来让计算机世界里的事物与现实世界相对应,而在今天的界面设计中,隐喻已经逐渐不能满足需要了。由于在视觉和交互技术上的进步,交互界面日趋接近人们的真实世界,对隐喻的依赖也越来越小了。过去,当设计师不知道哪个方案最佳的时候总是遵循前后一致的原则。选择用户已经理解的事物,保持概念的前后一致,也能够让界面更容易学习,更有效率,甚至更让用户心情舒畅。 要避免盲目的遵循一致性原则而忽略了去了解你的用户以及他们的任务和经验。决定新的系统在哪些方面同以前保持一致性的之前,先去了解一下用户的需要,看看他们期望保留些什么东西。确保用户在新的系统里有似曾相识的感觉才是设计一个真正直观的交互界面根本的目的。

显而易见:让对象和操作都直观可见,只要有可能,就要使交互界面表现的和真实世界一样。模仿真实世界和自然直接的交互方式能让交互界面更加直观,更易学易用。利用用户在计算机领域外的经验的最早尝试是使用图标和窗口系统。在我们逐渐趋向用真实世界的表示方法的时候,那些古老的表现方法将消失。在一个面向对象的交互界面上,展现给用户的对象和概念都是与真实世界相同的。例如我们的操作系统所提供的“回收站”,我们可以把没用的东西“扔”到里面。对我们来说,它更象一个真实的垃圾筐而不仅仅是一个抽象的容器。在需要的时候,我们甚至可以查看“回收站”里面都扔了些什么。对系统的控制应该明晰可见,而且各种功能也应该是明确的。对控制的可视化表现能够帮助用户理解操作规则,记住任务的步骤并且知道计算机正在做什么。例如,我们使用计算机提供的电话功能的时候,电话键盘的图象明白的告诉我们可以象用真实的电话键盘一样使用它们。允许用户直接去操作对象,尽量减少间接的操作步骤。识别并使用一个物体,在真实世界中不是被分开的步骤。同样的在计算机的操作中也没有必要把选择对象的步骤独立出来,因为选择的动作已经包含在拿起的动作中了。三维图象的界面更容易实现直接的操作。

激励:让操作是可以预期的同时也是可逆的,用户对每一个操作都期望得到预期的结果。为了符合这些期望,设计师必须理解用户的任务、目的和思维模式。使用用户熟悉的术语和图形,从而帮助用户弄明白计算机中的对象以及其间的相互关系和规则。 用户在进行一些尝试性操作的时候应该充满信心,他们知道自己可以去试着做些什么,然后就能看到结果,如果结果不满意还可以取消这个操作。使用一个允许把错误操作撤消的界面,会让用户感觉很好。即使是看上去最琐碎的操作,例如撤消选择或者移动对象,也应该是可逆的。想象一下,当你花了几分钟的时间精心选择了一些文件,正准备把它们打包的时候丢掉了选择,而这个操作又无法撤消,你会有什么样的沮丧心情。

避免一次完成不同的操作,因为用户也许并不清楚那些副作用。例如,如果一个用户选择了取消发送短信的*作,那么仅是发送的操作应该被取消,而不会附带着类似删除短信等其他操作。把各个操作分开,而允许用户自己去定义操作的批处理。

满足:创造一个有进展和成就的良好感觉 让用户能不断的取得进展并有成就感。对用户的操作要立刻作出反应,任何延迟都会干扰用户的工作,降低用户对系统的信心。及时的反馈可以让用户知道结果是否正确,并能够随时改变操作。例如,用户选择了一种新字体,使用这种字体的地方或者文字的样例应该马上改变。然后用户就可以知道他的选择是否恰当,如果不恰当,则可以马上更换。在用户使用一个不方便撤消的操作之前,要提供对操作结果的预览。例如,用户想在文档的一些地方使用加粗、有下划线的黑体字。预先在文档的某个部分示范这种变化,可以让用户决定是否执行操作。这样一来,可以为用户节约很多时间,而且增强了用户对系统的信心。避免让用户工作环境的信息得不到更新。信息应该不断刷新,以便用户能及时得作出正确的判断。如果结果不能立刻被显示出来,那么系统的工作状态也要通知用户。这一点在网络环境中特别重要,因为受带宽的限制在不同的网络系统中保持动态同步是比较困难的。例如,大部分浏览器都会在载入页面的过程中显示一个完成进度条。

有效:让每一个对象在任何时刻都能用,用户应该能够在任何时刻都可以使用他们的每一个对象。要避免模式化的操作,那种曾经通用的操作方式已经不应该再发挥作用了。模式化限制了用户和系统的交互。例如,在大多数菜单驱动的系统中,都有一种模式对话框(类似“打印”或者“另存为”)需要输入一些参数。这种对话框把用户锁在了系统的外面,如果用户想继续操作,那他必须先选择“确定”或“取消”。如果用户想先查看下面窗口里的内容再完成这个对话框,他就不得不先取消这个对话框,否则他无法激活其他窗口。

安全:让用户远离麻烦,应该让用户尽量避免发生错误。使用户远离麻烦的重担压在了设计师的肩上。交互界面应该提供视觉指引、提示、选择列表和其他的辅助,无论是自动的还是被人要求的。上下文的关联和浮动的帮助都可以象一个助手一样协助用户完成任务。即使最简单的提示也可以减少用户出麻烦的机会。 系统已经知道的事情就不要让用户依赖自己的记忆,比如,上一次的配置,文件名或者其他的一些细节。如果这些信息被保存在系统里面,无论是什么样的形式,系统都应该把它们提供出来。当用户需要确认请求或者修正错误的时候,双向的沟通是很必要的。在过去,很多交互界面仅用单向的沟通,计算机对用户,来处理这类问题。但沟通应该是交互式的,就象交互界面在其他方面做到的那样,要有丰富的表现和交流方式。系统应该显示相应的信息,并且提供查阅其他相关信息或者帮助的途径。例如,被设计在很多系统中的拼写检查功能,用户工作的同时,可能拼写错误的单词被标示出来,系统允许用户立刻换一个单词,或者当他们的工作告一段落的时候,再回过头来处理这些可能的错误。

记住下面的设计观点:用户知道自己想做什么,但有时他们发现使用现有的操作很难让系统明白他们的意图。这时,双向的沟通方式就能帮助用户来实现他们的目的。

多样:支持不同的交互技术,允许用户选择最适合自身情况的交互方式。这就要求交互界面能灵活的适应不同用户的操作技能,身体条件,交流习惯和使用环境。 每一种交互设备都是为了特别的用途或者用户所设计,并且在一定的条件下最方便操作。比如,麦克风和语音识别软件系统一起使用就可以快速的输入文章,也可以被用在一个要把手腾出来做其他事情的环境里。压感笔对于需要手绘的用户是很有帮助的。鼠标则更适用于精确的选择。不同的输出设备也同样,比如能够输出外语指令的计算机语音合成设备在一些地方就很有用处。但没有一种方式对所有环境都是最好的。用户应该允许在一次交互过程中使用不同的方式。比如,用户可以用鼠标批量的选择,然后用键盘来调整选项。同时,也应该允许用户用不同的设备完成同样的事情。如果在编辑文章的时候,用户不得不总是把手从键盘上移开去操作鼠标,是很让人头疼的。

提供不同的交互技术也是对有不同能力和处境的用户的一种尊重。这些不同包括残疾,偏好和工作环境的差异。

个性:允许用户自定义,交互界面应该可以根据每个用户的需要进行调整。没有两个用户是完全一样的。用户有各异的背景,爱好,动机,经验和能力。自定义的界面可以让人感觉舒适和亲切。个性化的计算机交互界面可以提高工作效率和用户满意度。比如,在用户经常使用的功能里,允许他们调整一些默认的参数,可以让用户节约时间减少麻烦。在某些工作场合,很多用户使用一台公用的计算机。就要允许用户建立他们自己的界面并很容易重新设定。而在有的环境里,一个用户又可能要使用不同的计算机,这时就要让用户能把个性化信息从一个系统移到另一个系统。

亲切:通过完美的视觉设计把操作带入生活中,在界面设计中,视觉设计的目的把所有设计原则在用户眼前体现出来。视觉设计应该顺应用户的思维模式,并且能够与用户清晰明确的沟通。视觉设计是设计过程中非常重要的部分。最终的结果应该是直观而且贴近用户习惯的。

下面的视觉设计原则可以帮助完成一个清楚简洁的交互界面:
· 减法设计-通过排除那些对视觉传达没有直接作用的视觉元素而减少混乱。
· 视觉层次-通过理解不同任务对用户的重要程度而为这些任务建立一个视觉层级。一个重要的任务应该使用特别的视觉标记。可以用相对位置,颜色对比和图形大小来区分。
· 识别-如果用户很容易判断应该使用哪个对象来操作,那么这个对象就是容易识别的。易被识别的对象往往模仿真实世界中的事物。
· 视觉方案-设计一个符合用户思维模式的视觉方案,让用户自己去定义界面。不要为了节省空间而过分的减少空白,空白提供着视觉上的“呼吸空间”。
当然,为了能够有效的运用这些设计原则,你首先还是要了解用户的目的和需求。如果不能让用户对最终放在他们面前的产品满意,死板的遵循设计原则也没有任何价值。
 
推荐阅读
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • 在Docker中,将主机目录挂载到容器中作为volume使用时,常常会遇到文件权限问题。这是因为容器内外的UID不同所导致的。本文介绍了解决这个问题的方法,包括使用gosu和suexec工具以及在Dockerfile中配置volume的权限。通过这些方法,可以避免在使用Docker时出现无写权限的情况。 ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • 禁止程序接收鼠标事件的工具_VNC Viewer for Mac(远程桌面工具)免费版
    VNCViewerforMac是一款运行在Mac平台上的远程桌面工具,vncviewermac版可以帮助您使用Mac的键盘和鼠标来控制远程计算机,操作简 ... [详细]
  • t-io 2.0.0发布-法网天眼第一版的回顾和更新说明
    本文回顾了t-io 1.x版本的工程结构和性能数据,并介绍了t-io在码云上的成绩和用户反馈。同时,还提到了@openSeLi同学发布的t-io 30W长连接并发压力测试报告。最后,详细介绍了t-io 2.0.0版本的更新内容,包括更简洁的使用方式和内置的httpsession功能。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • MyBatis错题分析解析及注意事项
    本文对MyBatis的错题进行了分析和解析,同时介绍了使用MyBatis时需要注意的一些事项,如resultMap的使用、SqlSession和SqlSessionFactory的获取方式、动态SQL中的else元素和when元素的使用、resource属性和url属性的配置方式、typeAliases的使用方法等。同时还指出了在属性名与查询字段名不一致时需要使用resultMap进行结果映射,而不能使用resultType。 ... [详细]
  • Tomcat/Jetty为何选择扩展线程池而不是使用JDK原生线程池?
    本文探讨了Tomcat和Jetty选择扩展线程池而不是使用JDK原生线程池的原因。通过比较IO密集型任务和CPU密集型任务的特点,解释了为何Tomcat和Jetty需要扩展线程池来提高并发度和任务处理速度。同时,介绍了JDK原生线程池的工作流程。 ... [详细]
  • 有没有一种方法可以在不继承UIAlertController的子类或不涉及UIAlertActions的情况下 ... [详细]
  • 如何在服务器主机上实现文件共享的方法和工具
    本文介绍了在服务器主机上实现文件共享的方法和工具,包括Linux主机和Windows主机的文件传输方式,Web运维和FTP/SFTP客户端运维两种方式,以及使用WinSCP工具将文件上传至Linux云服务器的操作方法。此外,还介绍了在迁移过程中需要安装迁移Agent并输入目的端服务器所在华为云的AK/SK,以及主机迁移服务会收集的源端服务器信息。 ... [详细]
  • 本文介绍了如何使用python从列表中删除所有的零,并将结果以列表形式输出,同时提供了示例格式。 ... [详细]
  • Linux环境变量函数getenv、putenv、setenv和unsetenv详解
    本文详细解释了Linux中的环境变量函数getenv、putenv、setenv和unsetenv的用法和功能。通过使用这些函数,可以获取、设置和删除环境变量的值。同时给出了相应的函数原型、参数说明和返回值。通过示例代码演示了如何使用getenv函数获取环境变量的值,并打印出来。 ... [详细]
  • 单点登录原理及实现方案详解
    本文详细介绍了单点登录的原理及实现方案,其中包括共享Session的方式,以及基于Redis的Session共享方案。同时,还分享了作者在应用环境中所遇到的问题和经验,希望对读者有所帮助。 ... [详细]
  • 本文讨论了微软的STL容器类是否线程安全。根据MSDN的回答,STL容器类包括vector、deque、list、queue、stack、priority_queue、valarray、map、hash_map、multimap、hash_multimap、set、hash_set、multiset、hash_multiset、basic_string和bitset。对于单个对象来说,多个线程同时读取是安全的。但如果一个线程正在写入一个对象,那么所有的读写操作都需要进行同步。 ... [详细]
author-avatar
小菠萝
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有