前言
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, *);
需要注意的地方:
- 建立Toast對象的時候,要設定Toast.LENGTH_LONG,最後不要調用show()方法。
- 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
就是我們想要展示的毫秒數!