Android Toast 長期顯示解決方案

Android Toast 長期顯示解決方案

Toast是Android中用來顯示顯示信息的一種機制,和Dialog不一樣的是,
Toast是沒有焦點的,而且Toast顯示的時間有限, 過一定的時間就會自動消失。
下面用一個實例來看看如何使用Toast。
首先建立一個ToastExample的項目,放置3個按鈕,分別爲 Text Only,Icon Only,Text and Icon。

Text Only
Toast.makeText(getApplicationContext(), "Text toast test!", Toast.LENGTH_LONG).show();

Icon Only
      Toast toast = new Toast(getApplicationContext());
        ImageView view = new ImageView(getApplicationContext());
        view.setImageResource(R.drawable.ic_dialog_alert);
        toast.setView(view);
        toast.show();

Text and Icon
      Toast toast = Toast.makeText(getApplicationContext(), "Text and Icon test!", Toast.LENGTH_LONG);
        View textView = toast.getView();
        LinearLayout lay = new LinearLayout(getApplicationContext());
        lay.setOrientation(LinearLayout.HORIZONTAL);
        ImageView view = new ImageView(getApplicationContext());
        view.setImageResource(R.drawable.ic_dialog_alert);
        lay.addView(view);
        lay.addView(textView);
        toast.setView(lay);
        toast.show();


自己寫了一個簡化類,把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);

  }

  }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章