Toast(トースト)の表示時間を短くする
Toastの表示時間をもっと短くしたい!
Androidには、ユーザにメッセージを通知する仕組みとして"Toast"が用意されています。
↓こんなの(「記入しました」って部分)。
で、このToastには表示時間が短い"Toast.LENGTH_SHORT"と、表示時間が長い"Toast.LENGTH_LONG"が指定できます。
ただこれ、表示時間が短い"Toast.LENGTH_SHORTでも2秒くらいは表示され続けてしまいます。
今回は、このToastの表示時間をもっと短くするためのやり方をご紹介します。
とりあえずコードを
public class QuickToastTask extends AsyncTask<String, Integer, Integer> { private Toast toast; private final Context context; private final int msgResId; private int dispTime; private static final int SHORT = 800; public QuickToastTask(final Context context, final int msgResId) { this.msgResId = msgResId; this.context = context; this.dispTime = SHORT; } @Override protected void onPreExecute() { Toast toast = Toast.makeText(context, msgResId, Toast.LENGTH_SHORT); this.toast = toast; toast.setGravity(Gravity.CENTER, 0, 0); toast.show(); } @Override protected Integer doInBackground(final String... params) { try { //ここでトースト表示時間分Sleepさせる。 Thread.sleep(dispTime); } catch (InterruptedException e) { e.printStackTrace(); } return 0; } @Override protected void onPostExecute(final Integer i) { //キャンセルするとトーストが消えます。 this.toast.cancel(); } }
使い方
new QuickToastTask(getApplicationContext(), R.string.REGISTER_COMPLETE_MESSAGE).execute();
説明
まあ、要はAsyncTaskで、Toastを表示させたい時間だけSleepさせて、その後、Toastをキャンセルするということです。
これで、好きな時間だけ表示させることが可能になりました。
※QuickToastTaskをラップしたUtilクラスを作ってもいいかもしれませんね。
この欲求の背景
「マネーCalc」では、
家計簿に記入したあとに「記入しました」とToast表示しています。
ユーザからすると恐らくToast表示が終わったら、登録が完了したと認識している方が多いと思います。
なので、Toast表示を短くすることで、登録が素早く完了したと認識させたいと思ったからです。
定型的なメッセージは、長い時間表示されると結構ウザイので、
このクラスを使ってサクサクToast表示をしてみてはいかがでしょうか