android Toast 长期显示解决方案

来源:互联网 发布:mp3格式转换器mac版 编辑:程序博客网 时间:2024/04/30 07:20

自己写了一个简化类,把Toast封装在里面,可以满足基本应用。

 

 

public class MyToast {
   
    private static final String TAG = "MyToast";
   
    public static final int LENGTH_MAX = -1;    //show until hide() function invoked
   
    boolean mCanceled = true;
    Handler mHandler;
    Context mContext;
    Toast mToast;
   
    public MyToast(Context context) {
        this(context,new Handler());
    }
   
    public MyToast(Context context,Handler h) {
        mContext = context;
        mHandler = h;
        mToast = Toast.makeText(mContext,"",Toast.LENGTH_SHORT);
        mToast.setGravity(Gravity.BOTTOM, 0, 0);
    }
   
    public void show(int resId,int duration) {
        mToast.setText(resId);
        if(duration != LENGTH_MAX) {
            mToast.setDuration(duration);
            mToast.show();
        } else if(mCanceled) {
            mToast.setDuration(Toast.LENGTH_LONG);
            mCanceled = false;
            showUntilCancel();
        }
    }
   
    public void show(String text,int duration) {
        mToast.setText(text);
        if(duration != LENGTH_MAX) {
            mToast.setDuration(duration);
            mToast.show();
        } else {
            if(mCanceled) {
                mToast.setDuration(Toast.LENGTH_LONG);
                mCanceled = false;
                showUntilCancel();
            }
        }
    }
   
    public void hide() {
        Log.d(TAG,"hide");
        mToast.cancel();
        mCanceled = true;
    }
   
    public boolean isShowing() {
        return !mCanceled;
    }
   
    private void showUntilCancel() {
        if(mCanceled)
            return;
        mToast.show();       
        mHandler.postDelayed(new Runnable() {
            public void run() {           
                showUntilCancel();
            }
        },3000);
    }

}