Tips

Android Toastの表示時間を長く/短くする 【Android TIPS】

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

JAVA Android初心者パックコース

Androidアプリ開発の必須知識!JAVAプログラミングを学べる連載リンク

はじめてのJAVA 連載

Recent News

Recent Tips

Tag Search