【问题标题】:Why is there no cancel button in Android's progress dialogs?为什么 Android 的进度对话框中没有取消按钮?
【发布时间】:2010-11-10 13:44:20
【问题描述】:

当我意识到 Android 的进度对话框或微调器中没有取消按钮时,我正面临着类似于 this person(自 2008 年 1 月起)所经历的令人头疼的时刻。现在是 2009 年 7 月,我刚刚安装了 Android 的纸杯蛋糕版本。这件事变了吗?如果没有,您是否在对话框中添加了取消按钮?您是如何做到的?

【问题讨论】:

    标签: java android user-interface


    【解决方案1】:

    不确定整个取消按钮...我听说过 onCancel() 方法未正确触发的报告。我的解决方案只是在对话框上制作一个普通按钮,并在按下按钮时调用返回。

    private void createCancelProgressDialog(String title, String message, String buttonText)
    {
        cancelDialog = new ProgressDialog(this);
        cancelDialog.setTitle(title);
        cancelDialog.setMessage(message);
        cancelDialog.setButton(buttonText, new DialogInterface.OnClickListener() 
        {
            public void onClick(DialogInterface dialog, int which) 
            {
                // Use either finish() or return() to either close the activity or just the dialog
                return;
            }
        });
        cancelDialog.show();
    }
    

    然后只需在活动的其他地方使用简单的调用方法

    createCancelProgressDialog("Loading", "Please wait while activity is loading", "Cancel");
    

    相当简单的解决方案,但它可以解决问题;) 还要注意,cancelDialog 是一个活动擦除变量,如果您不需要从其他地方调用它,那么您应该能够将变量的范围限制为该方法。

    【讨论】:

      【解决方案2】:

      我不是 Android 用户或开发人员,但我认为链接到线程中给出的答案相当不错:所有 Android 设备上都有一个硬件“返回”键。用户应该知道按 Back 以退出他们当前正在进行的任何活动。

      因此,UI 设计人员认为没有必要包含 GUI 后退/取消按钮。这可以看作是DRY原则的UI应用;如果已经有一种方法可以做某事,那就足够了。

      【讨论】:

      • 从历史上看,在 UI 中,通常认为提供多种冗余方式来完成相同任务会更好。如果这就是他们这样做的原因,那么有趣的方法。
      • 在我看来,返回按钮是浏览器返回按钮的同义词。对我(甚至我办公室的技术人员)来说,按下后退会关闭对话,这并不直观。
      • 然后你只需要等待对话框关闭,或者在微调器中选择已经选择的项目。通常,退出进度对话框不会取消该操作,因为无论如何应用程序都应该在线程中执行长时间运行的进程。除非他们正在寻找要关闭的对话框,否则无论如何该过程都会在某个时候完成。
      • 如果程序员认为取消按钮很有用,他们可以轻松添加它。默认情况下不需要它,因为并非在所有情况下都需要它。
      • 但问题是后面 NOT 是否意味着取消。例如,如果您使用带有 Checkbox 首选项的 PreferencesActivity,则在您切换按钮状态的那一刻就会提交首选项更改。因此,更改设置后按回不会取消;你留下了同样的状态。有关更多信息,请参阅mail-archive.com/android-developers@googlegroups.com/…
      【解决方案3】:

      硬件密钥是这里的答案。我会小心地将 DRY 原则推广到 UI。在很多情况下,您需要通过标题、正文、颜色和图像反复向用户敲击、敲击、敲击同一个点。

      用户不会像阅读小说那样“阅读”用户界面。他们扫描阅读。

      【讨论】:

        【解决方案4】:

        我不能代表其他应用程序,但在我的应用程序中,任何可能导致 UI 线程等待的东西都在单独的线程中执行。我要做的最多就是在标题栏中显示一个小的进度微调器,让用户知道后台正在发生一些事情。

        【讨论】:

          【解决方案5】:

          作为一名 Android 用户和开发人员,我可以说,根据我对平台的理解,我认为在无取消进度对话框中默认没有取消按钮是有充分理由的。

          作为开发者,这些对话框默认是不能取消的,也就是说,你必须明确地将它们设置为可取消。

          这是有道理的,因为它们的目的是通过 UI 线程提醒用户,在用户继续使用应用程序之前,其他地方正在进行一些对 UI 线程更新很重要的工作。

          例如,当获取一个数据列表以占据一个空屏幕时,没有任何可交互的内容,用户需要知道正在发生的事情,并期望没有可交互的内容直到这个过程完成。

          但是,在某些情况下,例如从 Internet 检索数据,过程“粗略”并且由于连接问题,您可能无法完成请求,并卡在此处。

          作为开发,您可以在其中启用可取消对话框。

          现在作为一个清楚了解Android UI范式的用户,我知道如果我想回到我之前正在做的事情,或者“取消”当前的操作,我应该点击返回键。

          作为用户,知道在 Android 中,菜单键通常可以显示隐藏的选项,有时在看似空白的屏幕上无法交互。

          这是用户期望的行为,也是平台的设计方式。您可以很好地添加一个取消按钮,但从了解他们手机的用户的角度来看,这没有什么区别,返回键显然是为此目的的预期选择。

          Activity 和 UI 有一个流程,您在“堆叠”的 Activity 和 UI“屏幕”中流动,而后退按钮本质上是“弹出”堆栈中的最后一件事,让您返回到之前的位置。如果您将对话框视为这些活动中的另一个,则希望将其从堆栈顶部弹出以返回到下面的内容或之前的活动。

          如果开发人员有一个无法通过 back 取消的对话框,则要么是设计使然,在某些情况下可能有很好的理由,要么是开发不善和对开发人员的疏忽。部分。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-07-27
            • 2021-11-14
            • 1970-01-01
            • 1970-01-01
            • 2011-07-12
            • 1970-01-01
            相关资源
            最近更新 更多