Android Toastの表示時間を長く/短くする 【Android TIPS】
ToastはToast.LENGTH_SHORT指定時に約2秒、Toast.LENGTH_LONG指定時に約4秒間 表示されます。
DDMSからキャプチャを取る際に4秒だと短すぎてうまく取れなかったり、
エラーメッセージを表示するのには2秒では長すぎたりすることもあります。
表示される時間を指定できたら便利だなーと思ってクラスを作ってみました。
package com.example;
import android.content.Context;
import android.os.AsyncTask;
import android.os.Handler;
import android.widget.Toast;
public class CustomToast extends AsyncTask<String, Integer, Integer> implements Runnable{
private Toast toast = null;
private long duration = 0;
private Handler handler = new Handler();
public static CustomToast makeText (Context context, int resId, long duration){
CustomToast ct = new CustomToast();
ct.toast = Toast.makeText(context, resId, Toast.LENGTH_SHORT);
ct.duration = duration;
return ct;
}
public static CustomToast makeText (Context context, CharSequence text, long duration){
CustomToast ct = new CustomToast();
ct.toast = Toast.makeText(context, text, Toast.LENGTH_SHORT);
ct.duration = duration;
return ct;
}
public void show() {
if(duration > 2000){
for (int i = 0; i < duration - 2000; i += 2000) {
handler.postDelayed(this, i);
}
handler.postDelayed(this, duration - 2000);
}else{
this.execute();
}
}
public void run() {
toast.show();
}
@Override
protected Integer doInBackground(String... params) {
try {
Thread.sleep(duration);
} catch (InterruptedException e) {
e.printStackTrace();
}
return 0;
}
@Override
protected void onPreExecute() {
toast.show();
}
@Override
protected void onPostExecute(final Integer i) {
toast.cancel();
}
}
以下、使用方法。
第3引数に表示時間(ms)を指定します。
// 10秒間Toastを表示 CustomToast.makeText(this, R.string.text, 10 * 1000).show(); // 0.5秒間Toastを表示 CustomToast.makeText(this, "ここに出力される文字を指定", 500).show();
表示時間が短い場合は、AsyncTaskを使いToastを表示させたい時間の間だけSleepしたのちToastをキャンセル、
表示時間が長い場合は、handler.postDeley()を使い、同じToastを何度も表示させています。
参考にしたHP:
http://d.hatena.ne.jp/shepherdMaster/20110418/1303165701
http://blog.kumarn.com/2012/04/android-toast.html
