web-dev-qa-db-fra.com

Comment définir le temps d'affichage de Toast inférieur à Toast.LENGTH_SHORT

Je veux afficher moins de pain grillé que Toast.LENGTH_SHORT, car je sens que cela prend environ 2 secondes. Je veux afficher des toasts que pendant une demi-seconde.

Et quel est l'intervalle de temps pour Toast.LENGTH_SHORT et Toast.LENGTH_LONG?

23
Zoombie

Il n'y a que deux valeurs possibles:

private static final int LONG_DELAY = 3500; // 3.5 seconds
private static final int SHORT_DELAY = 2000; // 2 seconds

Définir d'autres valeurs ne fonctionne pas. Si la durée n'est pas égale à 1 (Toast.LENGTH_LONG), la durée sera SHORT_DELAY (2 secondes):

long delay = immediate ? 0 : (r.duration == Toast.LENGTH_LONG ? LONG_DELAY : SHORT_DELAY);

Dans les sources de Toast écrit que 

Ce temps pourrait être défini par l'utilisateur.

mais je ne peux pas trouver le moyen de le faire.

Mise à jour: Il existe une solution ici: Définir la durée d'affichage du pain grillé

23
Sergey Glotov

Cela a fonctionné pour moi

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

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

Voir ma solution suggérée ici . En gros, vous appelez toast.cancel () après un délai spécifié inférieur à la durée standard de toast. 

10
noypiscripter

Essaye ça

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();

J'espère que cette aide .. Enjoy .. !!!

2
Virag Brahme

Pour les noobs, j'ai mis au point la solution la plus simple: une méthode.

public void showToastMessage(String text, int duration){
        final Toast toast = Toast.makeText(getActivity(), text, Toast.LENGTH_SHORT);
        toast.show();
        Handler handler = new Handler();
        handler.postDelayed(new Runnable() {
            @Override
            public void run() {
                toast.cancel();
            }
        }, duration);
}

Vous devez également importer:

import Android.os.Handler;
import Android.widget.Toast;

Vous pouvez appeler cette méthode par exemple:

showToastMessage("your noob", 1000);

la méthode ci-dessus ne devrait fonctionner que dans Fragment! Si vous voulez que cela fonctionne dans Activity, remplacez getActivity () par getApplicationContext () dans le message toast. Bonne chance aux développeurs!

1
Erikas
public void showMyToast(final Toast toast, final int delay) {
    final Timer timer = new Timer();
    timer.schedule(new TimerTask() {
        @Override
        public void run() {
            toast.show();
        }
    }, 0, 1000);
    new Timer().schedule(new TimerTask() {
        @Override
        public void run() {
            toast.cancel();
            timer.cancel();
        }
    }, delay);
}

// comment utiliser (MainActivity.Ceci est un exemple, il pourrait être changé par vous-même) et (Dans la méthode showMyToast (first param, second param), le second paramètre est le temps que vous définissez vraiment comme this)

Toast toast=Toast.makeText(MainActivity.this, "MyToast Test", Toast.LENGTH_LONG);
            showMyToast(toast, 1000);
0
Zoom ChipIn

ça va marcher.


   public void toastMessage(final String message) {
    this.runOnUiThread(new Runnable() {
        public void run() {
            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(100);
            myMessage.setGravity(Gravity.TOP | Gravity.CENTER_HORIZONTAL
                    | Gravity.CENTER_VERTICAL);
            toast.show();
        }
    });
}
0
Emran Hamza