2010-09-23 5 views
28

Czy mogę mimo to powiadomić Toast, że pojawia się tylko przez określony czas. Ogólnie krótszy niż zwykła wiadomość tostowa.Zestaw Toast Appear Length

+1

Opracowałem niestandardową klasę Toast, dzięki której możesz pokazać Toast przez określony czas ... spójrz na moją odpowiedź http://stackoverflow.com/questions/2220560/can-an-android-toast -będzie dłuższy niż długo-toast/21203554 # 21203554 –

Odpowiedz

88

Znalazłem rozwiązanie tego poprzez wywołanie toast.cancel() po pewnym opóźnieniem, który jest krótszy niż standardowy czas trwania toast.

 final Toast toast = Toast.makeText(ctx, "This message will disappear in 1 second", Toast.LENGTH_SHORT); 
     toast.show(); 

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

Świetne rozwiązanie! Wielkie dzięki – Komi

+0

Ładne obejście. Naprawdę mi pomogło! – Antonis

+0

+1 dla prostego rozwiązania –

6

nr

można zrobić coś takiego:

Toast a = Toast.makeText(this, "a", Toast.LENGTH_LONG); 
a.setDuration(300); 

ale nie pokaże się.

Czas trwania powinien wynosić LENGTH_SHORT lub LENGTH_LONG.

1

Można ustawić dłuższy czas za pomocą hack, jak opisano here

0

// spróbować

public void myToast(String message) { 
    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(400); 
    myMessage.setGravity(Gravity.TOP | Gravity.CENTER_HORIZONTAL 
      | Gravity.CENTER_VERTICAL); 
    toast.show(); 
} 
+1

Nie sądzę, że robi to coś dla przedłużenia czasu. Jeśli czas trwania nie jest LENGTH_SHORT lub LENGTH_LONG, domyślnie jest LENGTH_LONG. Ta metoda akceptuje arbitralne wartości w naturze, ale w rzeczywistości zmienia tylko zachowanie (długość tostu), jeśli wartość nie wynosi zero. –

4

Spróbuj

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

nadzieję, że to pomaga .. Ciesz .. !!!

0

Klasa Android Toast jest zakodowana tak, aby akceptować tylko Toast.LENGTH_SHORT lub Toast.LENGTH_LONG podczas wywoływania Toast. Wartości tych parametrów wynoszą odpowiednio 0 i 1 i nie akceptują żadnej milisekundy podczas wywoływania metody setDuration(); Jeśli musisz pokazywać toast przez inny czas, niż możesz rozważyć użycie klasy z mojej biblioteki SuperToasts. Klasa SuperToast w bibliotece jest imitacją klas Android Toast i może mieć dowolną wartość milisekundy jako parametr czasu trwania. Nie polecam używania tej klasy do pokazywania Toasta dłuższej niż maksymalnej czasowej Toastu Android ze względu na efekt przewlekły tych Grzanek. Zalecam używanie klasy SuperActivityToast, aby wyświetlać wiadomości Toast w Aktywności/Fragmencie, ponieważ Toast zostanie zniszczony wraz z Aktywnością, eliminując jakiekolwiek szanse na przedłużającą się wiadomość. Aby skorzystać z tej klasy można utworzyć nowy obiekt:

SuperActivityToast superActivityToast = new SuperActivityToast(this); 
superActivityToast.setDuration(SuperToast.DURATION_SHORT); 
// setDuration(); can also accept millisecond values 
// superActivityToast.setDuration(1000); 
superActivityToast.setText("Hello world!"); 
superActivityToast.show(); 

Albo użyć metody statycznej:

SuperActivityToast.createDarkSuperActivityToast(this, "Hello world!", SuperToast.DURATION_SHORT).show(); 

Istnieje mnóstwo opcji dostosowywania można korzystać z biblioteki, a także, sprawdź Wiki strona!

-1

Oto kolejny sposób, aby skonfigurować czas na swój wybór:

public void showMsg(String msg, final long duration) { 
    final Toast toast = Toast.makeText(getApplicationContext(), msg, Toast.LENGTH_LONG); 
    toast.show(); 
    Thread t = new Thread() { 
     public void run(){ 
      try { 
       sleep(duration); 
       toast.cancel(); 
      } catch (InterruptedException e) { 
       e.printStackTrace(); 
      } 
      finally { } 
     } 
    }; 
    t.start(); 
} 

UWAGA: Czas jest określony w milisekundach.

+0

Próbowałem bez powodzenia ... – zeflex