【问题标题】:Increase the Duration of a Toast增加吐司的持续时间
【发布时间】:2014-03-11 18:26:52
【问题描述】:

目前 Toast 只存在两个持续时间:Toast.LENGTH_SHORTToast.LENGTH_LONG...

但是,如果您想在 Android 中增加 Toast 的持续时间怎么办?

这是我想出并想分享的一个技巧:

public void createToast(Context context, String s) {
    int duration = Toast.LENGTH_LONG;
    final Toast toast = Toast.makeText(context, s, duration);

    toast.show();

    new CountDownTimer(5000, 1000) 
    {
        public void onTick(long millisUntilFinished) {
            if (toast.getView().getWindowToken() != null)
                toast.show();
            else
                cancel();
        }
        public void onFinish() {
            if (toast.getView().getWindowToken() !=null)
                toast.show();
            else
                cancel();
        }

    }.start();
}

如果您想要更长的吐司时间,只需增加CountDownTimer 的持续时间即可。

请记下这些行

if (toast.getView().getWindowToken !=null)

如果 toast 的 windowToken 为空,这几乎是说 Toast 已经离开了视图,(即 toast 被取消了)。

我在网上找到了一些增加 toast 持续时间的解决方案,但如果 toast 已被用户解除,我找不到一个可以保留解除的解决方案。因此,我将上述内容拼凑在一起以保留正常的 Toast 功能。

让我知道你的想法!

【问题讨论】:

  • 感谢您的分享。你能把你的技巧放在下面的答案中吗?
  • 这很有趣..酷!
  • 一个很好的解决方法,但我相信如果您打算向用户显示持续时间超过 3.5 秒的内容,状态栏通知会更合适。但同样,这是一个很好的分享。谢谢。
  • 嘿@MattK,感谢您的回复!我正在考虑状态栏通知,但遗憾的是它与我正在使用的 UI 没有意义:( 哈哈

标签: android android-toast


【解决方案1】:

首先,我没有看到你的问题。如果问题是“你怎么看?”,我怀疑你需要ToastToast.LENGTH_LONG 更长的情况。如果Toast.LENGTH_LONG 很短,可能最好使用AlertDialog

无论如何,您的解决方案似乎有点重...您可以堆叠Toast 消息,因此您可以使用相同的消息创建两个或多个Toasts,并一个接一个地实例化。这样的效果应该就是你想要的。

【讨论】:

  • 你的意思是这样的:for(int i = 0; i
  • 它可以工作,但是您需要在每次迭代时创建一个新的 toast,而不是显示相同的。 for(int i = 0; i
  • 这是一种不同的做法;但我仍然对此感到厌倦;我绝对讨厌创建比我需要的更多的对象,这只是我一直试图遵循的开发人员实践。不过还是谢谢分享!
【解决方案2】:

我发布了这个问题有点奇怪,我真正想做的是与大家分享以下关于如何在 Android 中延长 Toast 持续时间的技巧:

public void createToast(Context context, String s) {
     int duration = Toast.LENGTH_LONG;
     final Toast toast = Toast.makeText(context, s, duration);

     toast.show();

     new CountDownTimer(5000, 1000) 
     {
         public void onTick(long millisUntilFinished) {
             if (toast.getView().getWindowToken() != null)
                 toast.show();
             else
                 cancel();
         }
         public void onFinish() {
             if (toast.getView().getWindowToken() !=null)
                 toast.show();
             else
                 cancel();
         }
     }.start();
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-07
    • 2015-06-14
    • 2011-07-13
    • 2018-11-26
    • 1970-01-01
    相关资源
    最近更新 更多