如何在Toast通知中包含一个按钮?

19

首先,我知道之前已经有人问过类似的问题:在自定义Android Toast中添加按钮?。虽然这几乎是一个完全重复的问题,但我认为由于它已被用于应用程序中,例如Gmail for ICS(当您删除一条消息时它出现),所以它值得提出新问题。

链接的问题说无法在Toast中包含按钮,因为Toast无法获得焦点。这是错误的、过时的还是Gmail找到了一种方法绕过它呢?


4
你所指的Gmail中的“Toast”是什么?更重要的是,你是如何证明它是一个“Toast”的? - CommonsWare
1
我刚刚在ICS上尝试了Gmail,但我找不到它何时会弹出带有按钮的toast。此外,使用自定义对话框或自定义透明活动并在其上添加对话框,应该很容易模仿Toast的外观和行为,使其几乎与真正的Toast无法区分。 - Stephan Branczyk
2
“Toast” 显示文本和 “撤销” 按钮,而那不是一个 “Toast”。首先,它会一直存在,直到你触摸其他东西,而 “Toast” 则在一段时间后消失。如果我猜的话,那可能是一个简单的 ViewGroup,浮动在主活动的顶部(可能是作为 RelativeLayout 中的后代)。 - CommonsWare
我的答案被删除了,因为我在多个问题中给出了相同的答案,但我认为它真的会有所帮助。Gmail使用Snackbar来实现这一点。它比自定义的ViewDialog要简单得多,并且非常容易实现。在这里查看设置教程,在这里查看实现方法。顺便说一句,@MartijnPieters,我编辑了我的问题。如果您能看一下并将其恢复,我将不胜感激。 - Dylan Vander Berg
@MartijnPieters 这个问题的被采纳答案和一个不同的问题具有相同的答案。 - Dylan Vander Berg
显示剩余3条评论
5个回答

36

2

1
如果你想在一个toast中添加一个按钮,最好放弃这个想法。但是你可以使用对话框来代替toast。使用对话框,你可以显示任何你想要的内容(与toast相同的功能)。此外,在对话框中,你还可以设置按钮。

3
虽然在我的情况下对话框也可以使用,但我更愿意使用 Toast,因为它们不那么扰人。以 Gmail 为例,Toast 会显示文本和一个“撤销”按钮,因为他们不太可能想要撤消操作。如果每次想删除邮件时都弹出对话框,它会变得非常烦人。 - jmgrosen

0

iOS上的Gmail确实提供了一个toast,这比用对话框打断用户流程要好得多。

![iOS上Gmail中的Toast样式消息][1] [1]: http://i.stack.imgur.com/LWClq.jpg

如果您使用此选项,请确保toast显示足够长的时间,以便用户在需要时点击撤消。因此,信息仅toast中的时间为2.5-3秒,而不是5秒。

CommonsWare引用的另一个例子是滑动手势后显示的内联反馈。这不是toast,但也是提供反馈已执行操作的好方法。


0

我已经扩展了由@Hazem提到的UndoBar(link),并使其更加通用,以便它也可以用于其他操作。你可以在here看一下。


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