自定义 Toast 显示时间

自定义 Toast 显示时间

  1. package com.wm.realname.util;
  2. import android.content.Context;
  3. import android.os.Handler;
  4. import android.view.View;
  5. import android.widget.Toast;
  6. /**
  7. * Toast 自定义显示时间
  8. * 使用方法
  9. * 1.先初始化类 MyToast myToast = new MyToast(this);
  10. * 2.显示消息 myToast.setText("要显示的内容"); // 设置要显示的内容
  11. * myToast.show(8000); // 传入消息显示时间,单位毫秒,最少2000毫秒,并且只能是2000的倍数。
  12. * 传入0时会一直显示,只有调用 myToast.cancel(); 时才会取消。
  13. * 3.取消消息显示 myToast.cancel();
  14. * */
  15. public class ToastUtil {
  16. private Context mContext = null;
  17. private Toast mToast = null;
  18. private Handler mHandler = null;
  19. private int duration = 0;
  20. private int currDuration = 0;
  21. private final int DEFAULT = 2000;
  22. private Runnable mToastThread = new Runnable() {
  23. public void run() {
  24. mToast.show();
  25. mHandler.postDelayed(mToastThread, DEFAULT); // 每隔2秒显示一次
  26. if (duration != 0) {
  27. if (currDuration <= duration) {
  28. currDuration += DEFAULT;
  29. } else {
  30. cancel();
  31. }
  32. }
  33. }
  34. }
  35. public ToastUtil(Context context) {
  36. mContext = context;
  37. currDuration = DEFAULT;
  38. mHandler = new Handler(mContext.getMainLooper());
  39. mToast = Toast.makeText(mContext, "", Toast.LENGTH_LONG);
  40. }
  41. public void setText(String text) {
  42. mToast.setText(text);
  43. }
  44. public void show(int duration) {
  45. this.duration = duration;
  46. mHandler.post(mToastThread);
  47. }
  48. public void setGravity(int gravity, int xOffset, int yOffset) {
  49. mToast.setGravity(gravity, xOffset, yOffset);
  50. }
  51. public void setDuration(int duration) {
  52. mToast.setDuration(duration);
  53. }
  54. public void setView(View view) {
  55. mToast.setView(view);
  56. }
  57. public void cancel( ) {
  58. mHandler.removeCallbacks(mToastThread);// 先把显示线程删除
  59. mToast.cancel();// 把最后一个线程的显示效果cancel掉,就一了百了了
  60. currDuration = DEFAULT;
  61. }
  62. }

(完)