1,在Project的build.gradle文件中添加:
allprojects {
repositories {
...
maven { url "https://jitpack.io" }
}
}
2,在app的build.gradle文件中添加:
dependencies {
...
compile ''com.github.GrenderG:Toasty:1.1.5''
}
3,自定义旧版本工具类如下:
public class ToastUtils {
/***
*
* 弹出成功消息*
* @param text 需要显示的消息
* @param isShowIcon 是否需要显示图标 默认显示
*
*/
public static void toastSuccess(@NonNull String text, @NonNull Boolean isShowIcon) {
Toasty.success(MyApplication.getInstance(), text, Toast.LENGTH_SHORT, isShowIcon).show();
}
/***弹出错误消息*
* *@param text 需要显示的消息
* *@param isShowIcon 是否需要显示图标 默认显示*
* */
public static void toastError(@NonNull String text, @NonNull Boolean isShowIcon) {
Toasty.error(MyApplication.getInstance(), text, Toast.LENGTH_SHORT, isShowIcon).show();
}
/***弹出info消息*
* @param text 需要显示的消息*
* @param isShowIcon 是否需要显示图标 默认显示*
*/
public static void toastInfo(@NonNull String text, @NonNull Boolean isShowIcon) {
Toasty.info(MyApplication.getInstance(), text, Toast.LENGTH_SHORT, isShowIcon).show();
}
/***弹出警告消息*
*@param text 需要显示的消息
*@param isShowIcon 是否需要显示图标 默认显示*
*/
public static void toastWarn(@NonNull String text, @NonNull Boolean isShowIcon) {
Toasty.warning(MyApplication.getInstance(), text, Toast.LENGTH_SHORT, isShowIcon).show();
}
/***
* 弹出一般的消息
* @param text
*/
public static void toastNormal(@NonNull String text) {
Toasty.normal(MyApplication.getInstance(), text).show();
}
/***
* 弹出一般的带icon的消息
* @param text
* @param icon 图片id
*/
public static void toastNormalWithIcon(@NonNull String text, @NonNull int icon) {
Toasty.normal(MyApplication.getInstance(), text, ContextCompat.getDrawable(MyApplication.getInstance(), icon) ).show();
}
/***
*
* @param text 文本
* @param icon 图标id
* @param isShowIcon 是否显示图标
* @param textColor 文本的颜色
* @param color 设置Toast的颜色
* @param isShowBackColor 是否应用设置的颜色,如果为false代表不应用,那么依旧显示的是Normal时的颜色
*/
public static void toastCustorm(@NonNull String text,@NonNull int icon, @NonNull Boolean isShowIcon, @NonNull int textColor,@NonNull int color,@NonNull Boolean isShowBackColor) {
Toasty.custom(MyApplication.getInstance(), text, ContextCompat.getDrawable(MyApplication.getInstance(), icon),textColor, color, Toast.LENGTH_SHORT, isShowIcon,
isShowBackColor).show();
}
}
目前GitHub上最新版本为1.3.0,因为最新版本更改了Toast里面的默认字体大小,显得有点太大,不太好看,虽然也可以很方便的额外修改字体大小,字体样式但是毕竟要多写代码比较麻烦,个人感觉旧版本的字体大小刚好合适,如果想使用最新版本,那么接着往下看,因为新版本和旧版本的api有一点差别。
如果对旧版本字体大小和字体样式没有特定需要,那么使用旧版本即可。
修改版本号为最新的1.3.0:
'com.github.GrenderG:Toasty:1.3.0'
3,定义新版本工具类如下:
public class ToastUtils {
/***
*
* 弹出成功消息*
* @param text 需要显示的消息
* @param isShowIcon 是否需要显示图标 默认显示
*
*/
public static void toastSuccess(@NonNull String text, @NonNull Boolean isShowIcon) {
Toasty.success(MyApplication.getInstance(), text, Toast.LENGTH_SHORT, isShowIcon).show();
}
/***弹出错误消息*
* *@param text 需要显示的消息
* *@param isShowIcon 是否需要显示图标 默认显示*
* */
public static void toastError(@NonNull String text, @NonNull Boolean isShowIcon) {
Toasty.error(MyApplication.getInstance(), text, Toast.LENGTH_SHORT, isShowIcon).show();
}
/***弹出info消息*
* @param text 需要显示的消息*
* @param isShowIcon 是否需要显示图标 默认显示*
*/
public static void toastInfo(@NonNull String text, @NonNull Boolean isShowIcon) {
Toasty.info(MyApplication.getInstance(), text, Toast.LENGTH_SHORT, isShowIcon).show();
}
/***弹出警告消息*
*@param text 需要显示的消息
*@param isShowIcon 是否需要显示图标 默认显示*
*/
public static void toastWarn(@NonNull String text, @NonNull Boolean isShowIcon) {
Toasty.warning(MyApplication.getInstance(), text, Toast.LENGTH_SHORT, isShowIcon).show();
}
/***
* 弹出一般的消息
* @param text
*/
public static void toastNormal(@NonNull String text) {
Toasty.normal(MyApplication.getInstance(), text).show();
}
/***
* 弹出一般的带icon的消息
* @param text
* @param icon 图片id
*/
public static void toastNormalWithIcon(@NonNull String text, @NonNull int icon) {
Toasty.normal(MyApplication.getInstance(), text, ContextCompat.getDrawable(MyApplication.getInstance(), icon) ).show();
}
/***
*
* @param text 文本
* @param icon 图标id
* @param isShowIcon 是否显示图标
* @param color 设置Toast的颜色
* @param isShowBackColor 是否应用设置的颜色,如果为false代表不应用,那么依旧显示的是Normal时的颜色
*/
public static void toastCustorm(@NonNull String text,@NonNull int icon, @NonNull Boolean isShowIcon, @NonNull int color,@NonNull Boolean isShowBackColor) {
Toasty.custom(MyApplication.getInstance(), text, ContextCompat.getDrawable(MyApplication.getInstance(), icon), color, Toast.LENGTH_SHORT, isShowIcon,
isShowBackColor).show();
}
}
4,对应的MyApplication代码如下:
public class MyApplication extends Application {
private static MyApplication instance;
@Override
public void onCreate() {
super.onCreate();
instance= this;
// Toasty.Config.getInstance()
// .setTextColor(Color.GREEN) // 文字颜色
// .setToastTypeface(Typeface.SANS_SERIF) // 设置内置字体
// .setToastTypeface(Typeface.createFromAsset(getAssets(), "PCap Terminal.otf")) // 设置其他字体
// .setTextSize(14) // 单位sp
// .apply(); // required
}
public static MyApplication getInstance(){
return instance;
}
}
如果想要修改全局的弹出的Toast的文字颜色,字体样式,字体大小等可以在MyApplication中添加上面注释掉的代码,此时会全局生效,如果只想更改某次弹出的Toast的样式的话,可以这样设置:
Toasty.Config.getInstance()
.setTextColor(Color.GREEN)
.setToastTypeface(Typeface.createFromAsset(getAssets(), "PCap Terminal.otf"))
.apply();
ToastUtils.toastCustorm("点击了添加按钮3333!",R.drawable.ic_arrow_back_white,false, Color.RED,true);
Toasty.Config.reset(); // 该句代表重置配置,即恢复默认,如果不写该句,上面的配置会全局生效,直到某次调用reset终止。
注意旧版本中不支持以上更改字体大小和字体样式的代码,但旧版本中支持修改文本颜色,且修改的操作是封装在Custorm方法之中的,详见旧版本工具类中的最后一个方法定义。
另外再推荐一个支持更多属性的第三方Toast库:https://github.com/Muddz/StyleableToast ,如果这个满足不了你的需求,可以尝试使用该库。
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();
}
}
}