Android Toast 长期展示解决方案

Android Toast 长期显示解决方案Android Toast 长期显示解决方案 Toast是Android中用来显示显示信息的一种

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);

  }

  }