34

无论如何,我可以告诉 Toast 通知仅在指定的时间内显示。通常比普通的 toast 消息短。

4

7 回答 7

103

我通过在比标准吐司持续时间短的一定延迟后调用 toast.cancel() 找到了解决方案。

        final Toast toast = Toast.makeText(ctx, "This message will disappear in 1 second", Toast.LENGTH_SHORT);
        toast.show();

        Handler handler = new Handler();
            handler.postDelayed(new Runnable() {
               @Override
               public void run() {
                   toast.cancel(); 
               }
        }, 1000);
于 2012-03-15T07:22:17.447 回答
6

不。

您可以执行以下操作:

Toast a = Toast.makeText(this, "a", Toast.LENGTH_LONG);
a.setDuration(300);

但它不会显示出来。

持续时间应该是LENGTH_SHORTLENGTH_LONG

于 2010-09-23T03:01:30.963 回答
4

尝试这个

final Toast toast = Toast.makeText(getBaseContext(), "YOUR MESSAGE",Toast.LENGTH_SHORT);
            toast.show();
            new CountDownTimer(10000, 1000)
            {
                public void onTick(long millisUntilFinished) {toast.show();}
                public void onFinish() {toast.cancel();}
            }.start();

希望这有帮助..享受..!!!

于 2013-12-04T11:17:29.070 回答
1

您可以使用 hack 设置更长的持续时间,如此处所述

于 2011-11-06T17:00:35.313 回答
0

普通的 Android Toast 类被编码为在调用 Toast 时仅接受 Toast.LENGTH_SHORT 或 Toast.LENGTH_LONG 参数。这些参数的值分别为 0 和 1,调用 setDuration() 时不接受任何毫秒值;如果您必须在不同的持续时间内显示 Toast,则可以考虑使用我的SuperToasts库中的类。库中的SuperToast类模仿了现有的 Android Toast 类,可以使用任何毫秒值作为持续时间参数。由于这些 Toast 的挥之不去的影响,我不建议使用这个类来显示比最大库存 Android Toast 长度更长的 Toast。我建议您使用SuperActivityToast类在 Activity/Fragment 中显示 Toast 消息,因为 Toast 将与您的 Activity 一起被销毁,从而消除了任何挥之不去的消息的机会。要使用此类,您可以创建一个新对象:

SuperActivityToast superActivityToast = new SuperActivityToast(this);  
superActivityToast.setDuration(SuperToast.DURATION_SHORT); 
// setDuration(); can also accept millisecond values
// superActivityToast.setDuration(1000);  
superActivityToast.setText("Hello world!");  
superActivityToast.show();  

或者使用静态方法:

SuperActivityToast.createDarkSuperActivityToast(this, "Hello world!", SuperToast.DURATION_SHORT).show();  

您还可以在库中使用大量自定义选项,请查看Wiki页面!

于 2013-12-11T18:37:26.140 回答
0

//试试看

    public void myToast(String message) {
    LayoutInflater myInflator = getLayoutInflater();
    View myLayout = myInflator.inflate(R.layout.custom_layout,
            (ViewGroup) findViewById(R.id.toastlayout));
    TextView myMessage = (TextView) myLayout.findViewById(R.id.label);
    myMessage.setText(message);
    Toast toast = new Toast(getApplicationContext());
    toast.setView(myLayout);
    toast.setDuration(400);
    myMessage.setGravity(Gravity.TOP | Gravity.CENTER_HORIZONTAL
            | Gravity.CENTER_VERTICAL);
    toast.show();
}
于 2012-10-16T14:45:09.260 回答
-1

这是根据您的选择配置时间的另一种方法:

public void showMsg(String msg, final long duration) {
    final Toast toast = Toast.makeText(getApplicationContext(), msg, Toast.LENGTH_LONG);
    toast.show();
    Thread t = new Thread() {
        public void run(){
            try {
                sleep(duration);
                toast.cancel(); 
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            finally { }
        }
    };
    t.start();
}

注意:持续时间以毫秒为单位指定。

于 2013-12-18T06:06:57.383 回答