Установить длину тостов - PullRequest
       39

Установить длину тостов

31 голосов
/ 23 сентября 2010

Могу ли я в любом случае сказать, чтобы уведомление о тосте появлялось только в течение определенного периода времени.Обычно короче обычного тостового сообщения.

Ответы [ 7 ]

96 голосов
/ 15 марта 2012

Я нашел решение этой проблемы, вызвав toast.cancel () после некоторой задержки, которая меньше стандартной длительности тоста.

        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);
6 голосов
/ 23 сентября 2010

номер

Вы можете сделать что-то вроде:

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

но он не покажет себя.

Продолжительность должна быть либо LENGTH_SHORT, либо LENGTH_LONG.

4 голосов
/ 04 декабря 2013

Попробуйте это

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

Надеюсь, что это поможет .. Наслаждайтесь .. !!!

1 голос
/ 06 ноября 2011

Вы можете установить большую длительность, используя хак, как описано здесь

0 голосов
/ 18 декабря 2013

Вот еще один способ настроить время по вашему выбору:

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

ПРИМЕЧАНИЕ. Продолжительность указывается в миллисекундах.

0 голосов
/ 11 декабря 2013

Стандартный класс Android Toast закодирован так, чтобы при вызове Toast принимался только параметр Toast.LENGTH_SHORT или Toast.LENGTH_LONG.Значения этих параметров равны 0 и 1 соответственно и не принимают значения в миллисекундах при вызове setDuration ();Если вам нужно показать тост за другую продолжительность, чем вы можете подумать об использовании класса из моей библиотеки SuperToasts .Класс SuperToast в библиотеке является имитацией стандартного класса Android Toast и может иметь любое значение в миллисекундах, используемое в качестве параметра продолжительности.Я не рекомендую использовать этот класс для показа тоста * на 1005 * длиннее , чем максимальная стандартная длина тоста Android из-за длительного эффекта этих тостов.Я рекомендую вам использовать класс SuperActivityToast для отображения сообщений Toast в Activity / Fragment, потому что Toast будет уничтожен вместе с вашим Activity, исключая любые шансы на задержку сообщения.Чтобы использовать этот класс, вы можете создать новый объект:

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

Или использовать статический метод:

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

Существует множество параметров настройки, которые вы также можете использовать с библиотекой,проверьте страницу Wiki !

0 голосов
/ 16 октября 2012

// попробуйте

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