C’est ainsi que je dois afficher la Toast
pendant 500 millisecondes. Bien que, cela montre plus d'une seconde.
Toast.makeText(LiveChat.this, "Typing", 500).show();
Comment puis-je afficher Toast
uniquement pendant 500 millisecondes?
Cela ne peut pas être fait. Pour afficher un pain grillé d'une longueur inférieure à Toast.LENGTH_SHORT
, vous devez l'annuler après l'heure souhaitée. Quelque chose comme:
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);
En ajoutant à la réponse de @ Senth, si vous ne voulez pas accumuler l'heure lorsque vous appelez la méthode showToast plusieurs fois, avec le même message:
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();
}
Vous pouvez afficher toast maintenant pendant 500 ms comme ceci:
showToast("Not Allowed", 500);
J'ai trouvé cette réponse . Un peu plus complexe, il vous permet également de créer des toasts plus longs que Toast.LENGTH_LONG. Vous devrez peut-être modifier la durée du tick de 1000 ms à 500 ms.
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();
}
Voici comment cela fonctionne: le compte à rebours a une heure de notification plus courte que la durée d'affichage du pain grillé en fonction de l'indicateur, ce qui permet d'afficher à nouveau le pain grillé si le compte à rebours n'est pas terminé. Si le pain grillé est à nouveau affiché alors qu'il est encore à l'écran, il y restera toute la durée sans clignoter. Lorsque le compte à rebours est terminé, le pain est annulé pour le masquer même si sa durée d’affichage n’est pas terminée.
Cela fonctionne même si le pain grillé doit être affiché pendant une durée inférieure à la durée par défaut: le premier pain grillé affiché sera simplement annulé à la fin du compte à rebours.
Celui-ci fonctionne bien pour moi.
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();
le compte à rebours est utilisé pour afficher un message de pain grillé pendant une durée spécifique.
Vous ne pouvez pas faire ce que vous demandez avec les toasts standard. Peut-être devriez-vous penser à intégrer une bibliothèque tierce qui vous offre de meilleures options pour Toast (nommée Crouton). Je ne l'ai pas utilisé moi-même, mais les gens semblent l'aimer.
Vous ne pouvez pas contrôler la longueur des toasts dans le système d'exploitation standard.
Lien Crouton: https://github.com/keyboardsurfer/Crouton
Cela ne peut pas être fait. Les valeurs de Toast.LENGTH_SHORT
et Toast.LENGTH_LONG
sont 0 et 1. Cela signifie qu'elles sont traitées comme des indicateurs plutôt que comme des durées réelles. Par conséquent, je ne pense pas qu'il soit possible de définir la durée sur autre chose que ces valeurs.
J'ai essayé différentes méthodes et cette méthode fonctionne pour moi
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
Je ne crois pas que cela puisse être fait, vous ne pouvez utiliser que Toast.LENGTH_LONG
ou Toast.LENTH_SHORT
si vous ne pouvez pas définir votre vitesse connue.
J'ai créé une classe ToastMessage dans le côté droïde.
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;
});
}
}
J'ai créé l'interface IToast
public interface IToast
{
void LongAlert(string message);
}
Appel par service de dépendance
DependencyService.Get<IToast>().LongAlert("Right Answer");
Vous pouvez également modifier le modèle de l'exemple Toast.LENGTH_LONG
:
Toast.makeText(getBaseContext(),"your message",Toast.LENGTH_LONG*3).show();
Rappelant que le motif a une durée de 1 seconde
Essayez-le d'abord. Cela définit le pain grillé sur une période spécifique en millisecondes:
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);
}
}
}