天天看點

如何将Toast的顯示時間随意設定

前言

Android裡邊的Toast控件是應用與使用者互動的視窗,用于提示或者警告使用者一些互動的資訊,但是我們會發現就算設定了Toast.LENGTH_LONG,也隻有那麼幾秒鐘時間,那麼如何将這一時間随意設定呢?!

方法

首先我們寫一方法:

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

當然我們也可以将此方法設為static,加入到工具類中,友善調用。

接下來使用方法:

Toast toast=Toast.makeText(RegistActivity.this, "這是可以随意設定時間的Toast", Toast.LENGTH_LONG);
showMyToast(toast, *);
           

需要注意的地方:

  1. 建立Toast對象的時候,要設定Toast.LENGTH_LONG,最後不要調用show()方法。
  2. showMyToast()方法,傳入兩個參數,第一個參數為我們建立的Toast對象,第二個參數為我們想要設定顯示的毫秒數!

這個方法呢,算是比較巧妙的,也有投機取巧的成分!

因為Android系統Toast的顯示,是存在一個Toast隊列的,當一個Toast顯示之後,它會從隊列中取出來下一個來顯示!

還有在源碼中

Toast.LENGTH_LONG

顯示時間有3500毫秒,

LENGTH_SHORT

顯示時間為2000毫秒,這個我們可以在源碼中找到:

frameworks\base\services\Java\com\android\server

路徑下有個

NotificationManagerService.java

的檔案:

private static final int LONG_DELAY = ; 
private static final int SHORT_DELAY = ;
           

我們這裡采用的方法,使用一個Timer去排程一個TimeTask,delay設定的是0s,是以立即執行

toast.show()

,然後每隔3.5s就又執行一遍,依次類推!

最後,使用另一個Timer去排程取消之前的timer和撤銷toast,而這裡設定了延遲

cnt

毫秒執行,這裡的

cnt

就是我們想要展示的毫秒數!

繼續閱讀