如何处理“保存”和“取消”按钮以及返回键

9
我想知道如何在我的应用程序中处理用户输入表单。 (真实预算轻量版)。目前我正在做的是这样的,但我不确定这是否是最佳实践:
大多数活动上有两个软按钮可接受用户输入:“保存”和“取消”。
“保存”捕获用户输入,然后完成当前活动 “取消”放弃任何用户输入并完成当前活动 按设备上的返回按钮会执行与“保存”相同的操作
后退按钮执行“保存并返回”的功能仍然让我有点困扰。新使用Android手机的用户可能习惯于Web浏览器,其中后退按钮表示“忘记此页面并返回上一页”。如果您在线购买东西并到达最终的“购买”页面,您不会期望后退按钮完成购买,对吗?但是似乎内置应用程序的行为就是这样,因此我不倾向于以不同的方式执行。
无论如何,我查看了官方文档,但未找到明确说明此行为的地方。有人可以指出正确的位置,或者至少提供某些关于最佳实践的指导吗?
我所看到的选择是:
按照目前的方式进行操作。 取消“保存”按钮,并指望用户知道返回等同于保存。 取消两个按钮,并从菜单键提供取消功能。
顺便说一下,Google联系人应用程序提供“完成”和“还原”按钮。我猜“还原”就是取消;有区别吗?也许我应该将按钮标记为“完成”和“还原”,而不是“保存”和“取消”?在Gmail中,菜单按钮提供“保存草稿”和“丢弃”的选择。如果我们有一些一致性,我们似乎会对用户有所帮助。
提前感谢。
4个回答

9
但似乎内置应用程序的行为就是这样工作的,所以我不想做出不同的选择。
我所知道唯一这样做的内置应用程序是联系人应用程序,但我觉得那种用户体验很糟糕。昨天我正好在咒骂它。
也许其他内置应用程序也会这样做,但我至少还没有遇到过或者记得。
无论如何,我已经查看了官方文档,但并没有发现明确说明此行为的内容。
文档中没有这种性质的用户体验指南。很遗憾。
如果我们在这里有一些一致性,我认为我们将为用户提供帮助。
对此,我没有异议。
就个人而言,我认为“返回”按钮的行为类似于“取消”或者任何负面选择。例如,在Android上,对话框通常会表现出这种方式。
如果您有现有的用户,并且已经与他们建立了联系(新闻通讯、支持Google Group等),我会向他们进行投票,看看他们的想法。最终,最重要的是你的用户想要什么。

在短时间内,使其可配置。理想情况下,对于这样的事情,应该有一个唯一正确的答案,因此可配置性将是无意义的。然而,如果你的调查显示出投票分裂,并且在缺乏Android平台UX指南的情况下,设置可能是正确的解决方案。


更新:我写了一篇博客文章介绍这个问题,因为我认为这是相当重要的,并值得更多的文字描述。


好的博客文章。我完全同意你的观点。我喜欢你的想法,即返回/主页等始终保存,但并不总是覆盖原始文档。对于像电子表格这样的复杂文档,您可以保存草稿,以便用户重新进入活动时,他们可以从离开的地方继续编辑,但用户稍后可以选择永久保存或放弃更改。 - SamStephens
1
感谢您的周到回答和博客文章。不幸的是,似乎没有明确的答案;每个人都在做自己的事情。目前我不打算改变任何东西,但我觉得我还没有想完。您是否考虑在您的(优秀的)书籍中讨论这个问题? - Burke
@Burke:“不幸的是,看起来没有明确的答案;每个人都在做自己的事情。” -- 没有来自Google的正式UX指南文件,这是可以预料的。“你考虑过在你(优秀的)书籍中讨论这个问题吗?” -- 我可能会在未来的一些书中介绍一些UX模式,感谢你的关心! - CommonsWare
回应您的博客文章,我想起了我最近使用vim的“撤销”系统的经历。有一个很棒的功能,可以在vim会话之间启用持久的“撤销”状态。启用后,我发现我可以强制保存甚至退出vim而不必担心我的更改。如果我犯了一个错误,我只需简单地恢复它。显然,这不适用于“发送”操作,但肯定适用于财务应用程序。忘记电子表格的草稿,只需制作一个真正好的撤销系统即可。 - Steve Pomeroy
这个答案应该被编辑以反映新的设计指南。如果你看一下联系人应用程序,编辑按钮现在会将操作栏转换为一个ActionMode,其中包含一个“放弃菜单”。返回仍然是保存,但现在有一个“取消”行为。 - Thierry Roy

3
我强烈推荐您采用标准Android和应用程序使用的模型,始终在原地进行编辑。也就是说,没有“保存”按钮--正在进行的更改实际上正在被保存。 (实现可能略有不同,但对用户来说不应该可见。)按照这个模型,您的按钮应该是“完成”和“还原”之类的东西。这有助于用户对正在进行的操作的心理模型,离开活动不太可能会变成“还原”操作。
使用这种数据编辑模型的一个原因是,您将遇到较少的坏边缘情况。如果您尝试呈现更传统的模型,其中用户明确保存,那么用户可能走出您的活动的任何路径都可能导致数据丢失,这会导致您想要保护他们免受此影响,从而尝试显示对话框以确认他们真的想要丢失他们的数据。这是一场失败的战斗,您永远无法覆盖所有漏洞,您的UX也会因此受到损害。(例如,考虑他们接收到来电时,这不是放置对话框并首先询问他们是否要保存其数据的时间,无论如何您也无法做到这一点。)
因此,请从您的基本模型开始进行编辑。这与标准平台使用的约定一致,并且在平台设计中有意选择了此模型,因为总体而言,它会产生更简单、更一致和更易理解的UX。通过避免明确的“保存”操作来设计您的UI流程,以强调此模型。

2
@hackbod:“在电话到来时不要丢失编辑”和“因为电话而进行永久性更改”之间有很大的区别。仅仅因为电话打来就发布不成熟的推文是不应该的。在电子表格中进行实验性的财务预测不应该覆盖真实的预测结果,仅仅因为电话打来了。应用程序应该将这些编辑保存在“草稿”中,并使用户可以轻松地从上次离开的地方继续。但必须通过积极用户请求才能进行永久数据更改或发布,而不是因为某人误按键而强制施加这些更改。 - CommonsWare
当然。"发送"和"保存"是非常不同的。例如,看看Gmail或Messaging是如何处理这个问题的。如果您离开,您的消息将被保存为草稿。您需要明确告诉他们发送消息。我回答的是原始问题,它明确谈论保存数据而不是发送数据。 - hackbod
另外,我想补充一点,最好等待用户按下“保存”按钮后再应用更改,因为有时它们可能会产生副作用和/或减慢设备。 - Pedro Loureiro
1
@jfelectron:“我们真的需要手把手地指导开发人员建立草稿表或类似的东西吗?” -- 在我看来,是的。 - CommonsWare
@Burke:标签非常重要,因为它们影响人们对正在发生的事情的心理模型。在一个可以直接编辑的模型中,“还原”更像是“撤销”而不是“取消”。在一个可以直接编辑的模型中,没有“保存”按钮的位置。 - Steve Pomeroy
显示剩余3条评论

1
对我来说,如果没有保存选项,我总是感觉“不安全”。例如,在GTask中,当您创建新任务时,点击“返回”(硬按钮)将保存内容并返回上一个屏幕。顺便说一下,没有软按钮。但我总是对此感到沮丧。
对于您的应用程序,在决定后退按钮执行的方式之前,我认为您需要考虑两件事:
  1. 您的“保存”操作有多重要(比如它将下订单!)
  2. 您的用户是否期望取消操作?
显然,如果保存操作需要花费较长时间且非常重要,则必须采取明确的控制(并且后退不会保存);对于第二点,我想GTask认为记录笔记应该快速简单,并且应该感觉像在纸上记录——一旦您写了就保存了。
根据您所说,Web浏览器中的后退是返回并忘记所有内容。但与此同时,Google(例如Google文档)也在自动进行后台保存,即使您返回也不会“忘记”。

我喜欢这个。我刚刚在这里和几个人交谈,他们都觉得它应该“还原”。对于从Linux和Windows转到Mac OSX的我来说,这也让我感到困惑,因为在一些设置页面上它们没有“保存”或“应用”按钮。一个复选框不应该占用太多空间。 - Joe Plante

0
尝试为用户按下返回键时确定通用操作会使这个问题变得更加困难(如果不是不可能的)。
一个更简单的方法是考虑上下文,我看到有两种主要情况:用户正在与对话框交互和用户正在与常规活动交互。
与对话框交互
如果用户在对话框中按下返回键(例如日期时间选择器对话框),那是因为他不想看到那个对话框或更改那个信息。
在对话框中,用户不期望更改应用,直到他说出来(通过按下“确定”)。
与活动交互
例如,用户正在查看您的应用程序提供的某些项目(联系人信息)的详细信息。在进行一些更改后按下返回键可能意味着“现在带我回到联系人列表”。无论如何,这并不完全清楚。因此,包括保存和放弃更改的选项(称之为任何你喜欢的名称)可能是一个好选择。
作为Android用户的想法
对话框中的行为是简单而清晰的。我认为我们对此毫不怀疑。

在活动中,我习惯使用返回键保存数据并回到上一个活动。每当我想放弃更改时,我会按菜单按钮并寻找取消按钮。

如果您想要更好的体验,请将默认行为作为首选项包含在内和/或在取消或保存信息时显示toast。

取消 vs 恢复

实际上,它们做的事情是一样的。取消应该取消你正在做的事情(编辑某些内容)。这应该/可以带你回到之前的状态(列表活动)。

恢复将更改您所看到的状态为您开始更改之前的状态。这可能不会带您到以前的活动。它只能更新UI为原始值。

联系人应用程序的实验

  1. 在编辑联系人时按返回键将保存更改。
  2. 在编辑联系人时按主页键将放弃更改。

哇!这对我来说是个大惊喜。我本来期望的是1而不是2(我刚刚验证了你是正确的)。所以在这种情况下,"home" = "discard"!我原以为"home"应该挂起当前状态,回到应用程序时会让你停留在原地。这很令人困惑。 - Burke

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接