Так я должен показать Toast
за 500 миллисекунд. Хотя, он показывает больше секунды.
Toast.makeText(LiveChat.this, "Typing", 500).show();
Как я могу показать Toast
только за 500 миллисекунд?
Так я должен показать Toast
за 500 миллисекунд. Хотя, он показывает больше секунды.
Toast.makeText(LiveChat.this, "Typing", 500).show();
Как я могу показать Toast
только за 500 миллисекунд?
Это невозможно. Чтобы показать тост длиной менее 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);
Добавление к ответу @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);
Я нашел этот ответ. Хотя он немного сложнее, он также позволяет создавать тосты дольше, чем 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();
}
Вот как это работает: обратный отсчет имеет время уведомления меньше времени, в течение которого тост отображается в соответствии с флагом, поэтому тост может быть показан снова, если обратный отсчет не завершен. Если тост снова отображается, пока он все еще находится на экране, он останется там на протяжении всей продолжительности, не мигая. Когда отсчет закончится, тост отменяется, чтобы скрыть его, даже если его продолжительность отображения не заканчивается.
Это работает, даже если тост должен отображаться на длительность короче, чем продолжительность по умолчанию: первый отображаемый тост будет просто отменен, когда обратный отсчет закончится.
Нельзя делать то, что вы спрашиваете, с помощью стандартных тостов. Возможно, вам стоит подумать о интеграции сторонней библиотеки, которая даст вам лучшие варианты Toast (называемые Crouton). Я не использовал его сам, но людям это нравится.
Вы не можете контролировать длину тостов в стандартной ОС.
Ссылка на Crouton: https://github.com/keyboardsurfer/Crouton
Это невозможно. Значения Toast.LENGTH_SHORT
и Toast.LENGTH_LONG
равны 0 и 1. Это означает, что они рассматриваются как флаги, а не фактические длительности, поэтому я не думаю, что можно будет установить продолжительность на что-либо иное, чем эти значения.
Этот работает для меня отлично.
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();
обратный отсчет используется для отображения тоста в течение определенной продолжительности.
Я не считаю, что это можно сделать, вы можете использовать только Toast.LENGTH_LONG
или Toast.LENTH_SHORT
, вы не можете определить свою скорость знания.
Попробуйте сначала. Это устанавливает тост за определенный период в миллисекундах:
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);
}
}
}
Я попробовал другой метод, и этот метод работает для меня
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
Toast.makeText(LiveChar.this,"Typing",Toast.LENGTH_SHORT);
Это единственный способ, которым вы можете...