温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Android中怎么使用Toast工具类

发布时间:2021-06-11 14:44:09 来源:亿速云 阅读:186 作者:Leah 栏目:移动开发

今天就跟大家聊聊有关Android中怎么使用Toast工具类,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

import android.content.Context; import android.view.View; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.Toast;   /**  * Toast统一管理类  */   public class ToastUtil {  private static boolean isShow = true;//默认显示  private static Toast mToast = null;//全局唯一的Toast   /**  *private控制不应该被实例化*/  private ToastUtil() {   throw new UnsupportedOperationException("不能被实例化");  }    /**   * 全局控制是否显示Toast   * @param isShowToast   */  public static void controlShow(boolean isShowToast){   isShow = isShowToast;  }    /**   * 取消Toast显示   */  public void cancelToast() {   if(isShow && mToast != null){    mToast.cancel();   }  }    /**   * 短时间显示Toast   *   * @param context   * @param message   */  public static void showShort(Context context, CharSequence message) {   if (isShow){    if (mToast == null) {     mToast = Toast.makeText(context, message, Toast.LENGTH_SHORT);    } else {     mToast.setText(message);    }    mToast.show();   }  }    /**   * 短时间显示Toast   *   * @param context   * @param resId 资源ID:getResources().getString(R.string.xxxxxx);   */  public static void showShort(Context context, int resId) {   if (isShow){    if (mToast == null) {     mToast = Toast.makeText(context, resId, Toast.LENGTH_SHORT);    } else {     mToast.setText(resId);    }    mToast.show();   }  }    /**   * 长时间显示Toast   *   * @param context   * @param message   */  public static void showLong(Context context, CharSequence message) {   if (isShow){    if (mToast == null) {     mToast = Toast.makeText(context, message, Toast.LENGTH_LONG);    } else {     mToast.setText(message);    }    mToast.show();   }  }    /**   * 长时间显示Toast   *   * @param context   * @param resId 资源ID:getResources().getString(R.string.xxxxxx);   */  public static void showLong(Context context, int resId) {   if (isShow){    if (mToast == null) {     mToast = Toast.makeText(context, resId, Toast.LENGTH_LONG);    } else {     mToast.setText(resId);    }    mToast.show();   }  }    /**   * 自定义显示Toast时间   *   * @param context   * @param message   * @param duration 单位:毫秒   */  public static void show(Context context, CharSequence message, int duration) {   if (isShow){    if (mToast == null) {     mToast = Toast.makeText(context, message, duration);    } else {     mToast.setText(message);    }    mToast.show();   }  }    /**   * 自定义显示Toast时间   *   * @param context   * @param resId 资源ID:getResources().getString(R.string.xxxxxx);   * @param duration 单位:毫秒   */  public static void show(Context context, int resId, int duration) {   if (isShow){    if (mToast == null) {     mToast = Toast.makeText(context, resId, duration);    } else {     mToast.setText(resId);    }    mToast.show();   }  }    /**   * 自定义Toast的View   * @param context   * @param message   * @param duration 单位:毫秒   * @param view 显示自己的View   */  public static void customToastView(Context context, CharSequence message, int duration,View view) {   if (isShow){    if (mToast == null) {     mToast = Toast.makeText(context, message, duration);    } else {     mToast.setText(message);    }    if(view != null){     mToast.setView(view);    }    mToast.show();   }  }    /**   * 自定义Toast的位置   * @param context   * @param message   * @param duration 单位:毫秒   * @param gravity   * @param xOffset   * @param yOffset   */  public static void customToastGravity(Context context, CharSequence message, int duration,int gravity, int xOffset, int yOffset) {   if (isShow){    if (mToast == null) {     mToast = Toast.makeText(context, message, duration);    } else {     mToast.setText(message);    }    mToast.setGravity(gravity, xOffset, yOffset);    mToast.show();   }  }    /**   * 自定义带图片和文字的Toast,最终的效果就是上面是图片,下面是文字   * @param context   * @param message   * @param iconResId 图片的资源id,如:R.drawable.icon   * @param duration   * @param gravity   * @param xOffset   * @param yOffset   */  public static void showToastWithImageAndText(Context context, CharSequence message, int iconResId,int duration,int gravity, int xOffset, int yOffset) {   if (isShow){    if (mToast == null) {     mToast = Toast.makeText(context, message, duration);    } else {     mToast.setText(message);    }    mToast.setGravity(gravity, xOffset, yOffset);    LinearLayout toastView = (LinearLayout) mToast.getView();    ImageView imageView = new ImageView(context);    imageView.setImageResource(iconResId);    toastView.addView(imageView, 0);    mToast.show();   }  }    /**   * 自定义Toast,针对类型CharSequence   * @param context   * @param message   * @param duration   * @param view   * @param isGravity true,表示后面的三个布局参数生效,false,表示不生效   * @param gravity   * @param xOffset   * @param yOffset   * @param isMargin true,表示后面的两个参数生效,false,表示不生效   * @param horizontalMargin   * @param verticalMargin   */  public static void customToastAll(Context context, CharSequence message, int duration,View view,boolean isGravity,int gravity, int xOffset, int yOffset,boolean isMargin,float horizontalMargin, float verticalMargin) {   if (isShow){    if (mToast == null) {     mToast = Toast.makeText(context, message, duration);    } else {     mToast.setText(message);    }    if(view != null){     mToast.setView(view);    }    if(isMargin){     mToast.setMargin(horizontalMargin, verticalMargin);    }    if(isGravity){     mToast.setGravity(gravity, xOffset, yOffset);    }    mToast.show();   }  }    /**   * 自定义Toast,针对类型resId   * @param context   * @param resId   * @param duration   * @param view :应该是一个布局,布局中包含了自己设置好的内容   * @param isGravity true,表示后面的三个布局参数生效,false,表示不生效   * @param gravity   * @param xOffset   * @param yOffset   * @param isMargin true,表示后面的两个参数生效,false,表示不生效   * @param horizontalMargin   * @param verticalMargin   */  public static void customToastAll(Context context, int resId, int duration,View view,boolean isGravity,int gravity, int xOffset, int yOffset,boolean isMargin,float horizontalMargin, float verticalMargin) {   if (isShow){    if (mToast == null) {     mToast = Toast.makeText(context, resId, duration);    } else {     mToast.setText(resId);    }    if(view != null){     mToast.setView(view);    }    if(isMargin){     mToast.setMargin(horizontalMargin, verticalMargin);    }    if(isGravity){     mToast.setGravity(gravity, xOffset, yOffset);    }    mToast.show();   }  } }

最后告诉大家点小秘密:

1)Toast底层使用handler机制,分别post一个nShow和一个mHide来控制Toast显示还是隐藏

2)Toast的视图是通过WindowManager的addView来加载的

3)先通过makeText()实例化出一个Toast,然后调用toast.Show()方法,这时并不会马上显示Toast,而是会实例化一个TN变量,然后通过service.enqueueToast()将其加到服务队列里面去等待显示。在TN中进行调控Toast的显示格式以及里面的hide()、show()方法来控制Toast的出现以及消失,强调一下的是这个队列是系统维护的,我们并不能干涉。

4)我们常传的时间参数LONG_DELAY和SHORT_DELAY具体时间分别是:3.5秒和2秒

5)如果我们自己也想实现类似Toast效果怎么办?

可以使用windowManager添加view的方式实现自己想要的效果

看完上述内容,你们对Android中怎么使用Toast工具类有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注亿速云行业资讯频道,感谢大家的支持。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI