我怎样才能显示特定时间举杯?(How can I show a toast for a specif

2019-07-18 15:54发布

这是我要展示的方式Toast为500毫秒。 虽然,它显示超过一秒钟。

Toast.makeText(LiveChat.this, "Typing", 500).show(); 

我怎样才能显示Toast只为500毫秒?

Answer 1:

这不能做。 要显示的长度短于举杯Toast.LENGTH_SHORT ,你必须你想要的时间后取消。 就像是:

final Toast toast = Toast.makeText(getApplicationContext(), "This message will disappear in half a second", Toast.LENGTH_SHORT);
    toast.show();

    Handler handler = new Handler();
        handler.postDelayed(new Runnable() {
           @Override
           public void run() {
               toast.cancel(); 
           }
    }, 500);


Answer 2:

添加到@ Senth的答案,如果你不惯于当你调用showToast方法多次,相同的消息累积时间:

private Toast mToastToShow = null;
String messageBeingDisplayed = "";

/**
 * Show Toast message for a specific duration, does not show again if the message is same
 *
 * @param message     The Message to display in toast
 * @param timeInMSecs Time in ms to show the toast
 */
public void showToast(String message, int timeInMSecs) {
    if (mToastToShow != null && message == messageBeingDisplayed) {
        Log.d("DEBUG", "Not Showing another Toast, Already Displaying");
        return;
    } else {
        Log.d("DEBUG", "Displaying Toast");
    }
    messageBeingDisplayed = message;
    // Set the toast and duration
    int toastDurationInMilliSeconds = timeInMSecs;
    mToastToShow = Toast.makeText(this, message, Toast.LENGTH_LONG);

    // Set the countdown to display the toast
    CountDownTimer toastCountDown;
    toastCountDown = new CountDownTimer(toastDurationInMilliSeconds, timeInMSecs /*Tick duration*/) {
        public void onTick(long millisUntilFinished) {
            if (mToastToShow != null) {
                mToastToShow.show();
            }
        }

        public void onFinish() {
            if (mToastToShow != null) {
                mToastToShow.cancel();
            }
            // Making the Toast null again
            mToastToShow = null;
            // Emptying the message to compare if its the same message being displayed or not
            messageBeingDisplayed = "";
        }
    };

    // Show the toast and starts the countdown
    mToastToShow.show();
    toastCountDown.start();
}

您可以为500毫秒现在这个样子显示举杯:

showToast("Not Allowed", 500);


Answer 3:

我发现这个答案 。 虽然有点更复杂它也可以让你创造出比Toast.LENGTH_LONG长祝酒。 您可能需要从1000毫秒蜱持续时间更改为500毫秒。

private Toast mToastToShow;
public void showToast(View view) {
   // Set the toast and duration
   int toastDurationInMilliSeconds = 10000;
   mToastToShow = Toast.makeText(this, "Hello world, I am a toast.", Toast.LENGTH_LONG);

   // Set the countdown to display the toast
   CountDownTimer toastCountDown;
   toastCountDown = new CountDownTimer(toastDurationInMilliSeconds, 1000 /*Tick duration*/) {
      public void onTick(long millisUntilFinished) {
         mToastToShow.show();
      }
      public void onFinish() {
         mToastToShow.cancel();
         }
   };

   // Show the toast and starts the countdown
   mToastToShow.show();
   toastCountDown.start();
}

下面是它的工作原理:在倒数通知的时间比其土司根据标志显示的持续时间短,所以烤面包可以再次显示,如果倒计时还没有结束。 如果敬酒再次显示,而它仍然是在屏幕上,它会在那里住的整个持续过程无闪烁。 当倒计时结束后,面包被取消隐藏它,即使它的显示时间还没有结束。

这个工程即使必须证明为比默认持续时间短的持续时间敬酒:当倒计时结束后显示的第一个面包就干脆被取消。



Answer 4:

做不到,你用标准的祝酒词叫什么。 也许你应该考虑一下集成第三方库,为您提供更好的吐司选项(名为Crouton)。 我没有用它自己,但人们似乎喜欢它。

你无法控制祝酒词的长度在标准操作系统。

Crouton链接: https://github.com/keyboardsurfer/Crouton



Answer 5:

这不能做。 值Toast.LENGTH_SHORTToast.LENGTH_LONG是0和1。这意味着它们是作为标志,而不是实际的持续时间处理,所以我不认为这将有可能设置持续时间比这些数值的任何其他。



Answer 6:

这一个是对我工作的罚款。

final Toast mToastToShow;
            int toastDurationInMilliSeconds = 10000;
            mToastToShow =  Toast.makeText(getApplicationContext(), "Snapshot Saved Successfully.",Toast.LENGTH_LONG);


            // Set the countdown to display the toast
            CountDownTimer toastCountDown;
            toastCountDown = new CountDownTimer(toastDurationInMilliSeconds, 1000 /*Tick duration*/) {
                public void onTick(long millisUntilFinished) {
                    mToastToShow.show();
                }
                public void onFinish() {
                    mToastToShow.cancel();
                }
            };

            // Show the toast and starts the countdown
            mToastToShow.show();
            toastCountDown.start();

倒计时用于显示举杯消息特定的持续时间。



Answer 7:

我不相信这是可以做到,你只能使用Toast.LENGTH_LONGToast.LENTH_SHORT你不能定义你知道速度。



Answer 8:

第一次尝试。 这台举杯以毫秒为一个特定时期:

public void toast(int millisec, String msg) {
    Handler handler = null;
    final Toast[] toasts = new Toast[1];
    for(int i = 0; i < millisec; i+=2000) {
        toasts[0] = Toast.makeText(this, msg, Toast.LENGTH_SHORT);
        toasts[0].show();
        if(handler == null) {
            handler = new Handler();
            handler.postDelayed(new Runnable() {
                @Override
                public void run() {
                    toasts[0].cancel();
                }
            }, millisec);
        }
    }
}


Answer 9:

我尝试了不同的方法,这方法对我的作品

 final Toast mytoast = Toast.makeText(getApplicationContext(), jsonObject.getString("response_message"), Toast.LENGTH_SHORT);
 mytoast.show();

                        Handler handler = new Handler();
                        handler.postDelayed(new Runnable() {
                            @Override
                            public void run() {
                                mytoast.cancel();
                            }
                        }, 5000);// 5 sec


Answer 10:

我已经创造了机器人侧的一类ToastMessage。

   public class ToastMessage: IToast
        {
            public void LongAlert(string message)
            {
                Toast toast = Toast.MakeText(Android.App.Application.Context, message, ToastLength.Short);
                toast.Show();
                Device.StartTimer(TimeSpan.FromSeconds(0.5), () =>
                {               
                   toast.Cancel();
                    return false;
                });
            }
        }

我创建界面IToast

 public  interface IToast
    {
        void LongAlert(string message);
    }

调用由相关性服务

 DependencyService.Get<IToast>().LongAlert("Right Answer");


Answer 11:

您还可以修改的模式Toast.LENGTH_LONG例如:

Toast.makeText(getBaseContext(),"your message",Toast.LENGTH_LONG*3).show();

记住的是,该图案具有1秒的持续时间



Answer 12:

接受的答案是正确的,但在我的情况下,眨眼干杯(显示和隐藏)可以注意到..

我这里面包不闪烁的解决方案,你可以自定义吐司也是如此。

让我们开始,

1)创建命名LongToast类。

class LongToast {

private LongToast() {}

static void makeLongToast(Context context,String text, long durationInMillis) 
{

 final Toast toastMessage = new Toast(context);

 //Creating TextView.
 TextView textView = new TextView(context);

 //Setting up Text Color.
 textView.setTextColor(Color.parseColor("#fafafa"));

 //Setting up Text Size.
 textView.setTextSize(17);

 //Setting up Toast Message Text.
 textView.setText(text);

 //Add padding to Toast message.
 textView.setPadding(20, 20, 20, 23);

 //Add Gravity TextView.
 textView.setGravity(Gravity.CENTER);

 //Adding TextView into Toast.
 toastMessage.setView(textView);

 //Access toast message as View.
 View toastView = toastMessage.getView();

 //Set Custom Background on Toast.
 toastView.setBackgroundResource(R.drawable.test);


 new CountDownTimer(durationInMillis, 1000)
  {
   public void onTick(long millisUntilFinished)
   {
    toastMessage.show();
   }
  public void onFinish()
   {
    toastMessage.cancel();
   }

  }.start();
 }
}

2)创建自定义吐司可绘制XML。

<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item>
 <shape android:shape="rectangle">
 <solid android:color="#009973"/>
 <corners android:radius="20dp" />
 <stroke
  android:width="4dp"
  android:color="#01ffc0"
 />
</shape>

你可以自定义敬酒根据自己的需要。

3)最后调用吐司。

LongToast.makeLongToast(this,"whatever you want",10000);//duration in seconds

裁判: 点击这里查看

谢谢!!。



Answer 13:

Toast.makeText(LiveChar.this,"Typing",Toast.LENGTH_SHORT);

这是你的唯一途径..



文章来源: How can I show a toast for a specific duration?