読者です 読者をやめる 読者になる 読者になる

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表示をしてみてはいかがでしょうか