Подтвердить что ты не робот

Как я могу показать тост за определенную продолжительность?

Так я должен показать Toast за 500 миллисекунд. Хотя, он показывает больше секунды.

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

Как я могу показать Toast только за 500 миллисекунд?

4b9b3361

Ответ 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);

Ответ 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);

Ответ 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();
}

Вот как это работает: обратный отсчет имеет время уведомления меньше времени, в течение которого тост отображается в соответствии с флагом, поэтому тост может быть показан снова, если обратный отсчет не завершен. Если тост снова отображается, пока он все еще находится на экране, он останется там на протяжении всей продолжительности, не мигая. Когда отсчет закончится, тост отменяется, чтобы скрыть его, даже если его продолжительность отображения не заканчивается.

Это работает, даже если тост должен отображаться на длительность короче, чем продолжительность по умолчанию: первый отображаемый тост будет просто отменен, когда обратный отсчет закончится.

Ответ 4

Нельзя делать то, что вы спрашиваете, с помощью стандартных тостов. Возможно, вам стоит подумать о интеграции сторонней библиотеки, которая даст вам лучшие варианты Toast (называемые Crouton). Я не использовал его сам, но людям это нравится.

Вы не можете контролировать длину тостов в стандартной ОС.

Ссылка на Crouton: https://github.com/keyboardsurfer/Crouton

Ответ 5

Это невозможно. Значения Toast.LENGTH_SHORT и Toast.LENGTH_LONG равны 0 и 1. Это означает, что они рассматриваются как флаги, а не фактические длительности, поэтому я не думаю, что можно будет установить продолжительность на что-либо иное, чем эти значения.

Ответ 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();

обратный отсчет используется для отображения тоста в течение определенной продолжительности.

Ответ 7

Я не считаю, что это можно сделать, вы можете использовать только Toast.LENGTH_LONG или Toast.LENTH_SHORT, вы не можете определить свою скорость знания.

Ответ 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);
        }
    }
}

Ответ 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

Ответ 10

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

Это единственный способ, которым вы можете...