Toasty
一个创建自定义Toast的库。正如作者所说,这个库是:
The usual Toast, but with steroids.
Toasty Android Studio编写
从Github下载,直接导入 Import Project运行
Toasty 效果:
Toasty 结构
实现在Module:toasty中,实例在Module:app中
Toasty 7中具体实例
1、To display an error Toast:
Toasty.error(yourContext, "This is an error toast.", Toast.LENGTH_SHORT, true).show();
2、To display a success Toast:
Toasty.success(yourContext, "Success!", Toast.LENGTH_SHORT, true).show();
3、To display an info Toast:
Toasty.info(yourContext, "Here is some info for you.", Toast.LENGTH_SHORT, true).show();
4、To display a warning Toast:
Toasty.warning(yourContext, "Beware of the dog.", Toast.LENGTH_SHORT, true).show();
5、To display the usual Toast:
Toasty.normal(yourContext, "Normal toast w/o icon").show();
6、To display the usual Toast with icon:
Toasty.normal(yourContext, "Normal toast w/ icon", yourIconDrawable).show();
7、You can also create your custom Toasts with the custom() method:
Toasty.custom(yourContext, "I'm a custom Toast", yourIconDrawable, textColor, tintColor, duration, withIcon, true).show();
There are variants of each method, feel free to explore this library.
前六种都是使用Toasty中custom方法实现,根本实现还是Toast。
final Toast currentToast = new Toast(context);
final View toastLayout = ((LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE)).inflate(R.layout.toast_layout, null);
Toasty 实现
Toasty.java
@SuppressLint("InflateParams")
public class Toasty {
private static final
@ColorInt
int DEFAULT_TEXT_COLOR = Color.parseColor("#FFFFFF");
private static final
@ColorInt
int ERROR_COLOR = Color.parseColor("#D50000");
private static final
@ColorInt
int INFO_COLOR = Color.parseColor("#3F51B5");
private static final
@ColorInt
int SUCCESS_COLOR = Color.parseColor("#388E3C");
private static final
@ColorInt
int WARNING_COLOR = Color.parseColor("#FFA900");
private static final String TOAST_TYPEFACE = "sans-serif-condensed";
private Toasty() {
}
public static
@CheckResult
Toast normal(@NonNull Context context, @NonNull String message) {
return normal(context, message, Toast.LENGTH_SHORT, null, false);
}
public static
@CheckResult
Toast normal(@NonNull Context context, @NonNull String message, Drawable icon) {
return normal(context, message, Toast.LENGTH_SHORT, icon, true);
}
public static
@CheckResult
Toast normal(@NonNull Context context, @NonNull String message, int duration) {
return normal(context, message, duration, null, false);
}
public static
@CheckResult
Toast normal(@NonNull Context context, @NonNull String message, int duration,
Drawable icon) {
return normal(context, message, duration, icon, true);
}
public static
@CheckResult
Toast normal(@NonNull Context context, @NonNull String message, int duration,
Drawable icon, boolean withIcon) {
return custom(context, message, icon, DEFAULT_TEXT_COLOR, duration, withIcon);
}
public static
@CheckResult
Toast warning(@NonNull Context context, @NonNull String message) {
return warning(context, message, Toast.LENGTH_SHORT, true);
}
public static
@CheckResult
Toast warning(@NonNull Context context, @NonNull String message, int duration) {
return warning(context, message, duration, true);
}
public static
@CheckResult
Toast warning(@NonNull Context context, @NonNull String message, int duration, boolean withIcon) {
return custom(context, message, ToastyUtils.getDrawable(context, R.drawable.ic_error_outline_white_48dp),
DEFAULT_TEXT_COLOR, WARNING_COLOR, duration, withIcon, true);
}
public static
@CheckResult
Toast info(@NonNull Context context, @NonNull String message) {
return info(context, message, Toast.LENGTH_SHORT, true);
}
public static
@CheckResult
Toast info(@NonNull Context context, @NonNull String message, int duration) {
return info(context, message, duration, true);
}
public static
@CheckResult
Toast info(@NonNull Context context, @NonNull String message, int duration, boolean withIcon) {
return custom(context, message, ToastyUtils.getDrawable(context, R.drawable.ic_info_outline_white_48dp),
DEFAULT_TEXT_COLOR, INFO_COLOR, duration, withIcon, true);
}
public static
@CheckResult
Toast success(@NonNull Context context, @NonNull String message) {
return success(context, message, Toast.LENGTH_SHORT, true);
}
public static
@CheckResult
Toast success(@NonNull Context context, @NonNull String message, int duration) {
return success(context, message, duration, true);
}
public static
@CheckResult
Toast success(@NonNull Context context, @NonNull String message, int duration, boolean withIcon) {
return custom(context, message, ToastyUtils.getDrawable(context, R.drawable.ic_check_white_48dp),
DEFAULT_TEXT_COLOR, SUCCESS_COLOR, duration, withIcon, true);
}
public static
@CheckResult
Toast error(@NonNull Context context, @NonNull String message) {
return error(context, message, Toast.LENGTH_SHORT, true);
}
public static
@CheckResult
Toast error(@NonNull Context context, @NonNull String message, int duration) {
return error(context, message, duration, true);
}
public static
@CheckResult
Toast error(@NonNull Context context, @NonNull String message, int duration, boolean withIcon) {
return custom(context, message, ToastyUtils.getDrawable(context, R.drawable.ic_clear_white_48dp),
DEFAULT_TEXT_COLOR, ERROR_COLOR, duration, withIcon, true);
}
public static
@CheckResult
Toast custom(@NonNull Context context, @NonNull String message, Drawable icon,
@ColorInt int textColor, int duration, boolean withIcon) {
return custom(context, message, icon, textColor, -1, duration, withIcon, false);
}
public static
@CheckResult
Toast custom(@NonNull Context context, @NonNull String message, @DrawableRes int iconRes,
@ColorInt int textColor, @ColorInt int tintColor, int duration,
boolean withIcon, boolean shouldTint) {
return custom(context, message, ToastyUtils.getDrawable(context, iconRes), textColor,
tintColor, duration, withIcon, shouldTint);
}
public static
@CheckResult
Toast custom(@NonNull Context context, @NonNull String message, Drawable icon,
@ColorInt int textColor, @ColorInt int tintColor, int duration,
boolean withIcon, boolean shouldTint) {
final Toast currentToast = new Toast(context);
final View toastLayout = ((LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE))
.inflate(R.layout.toast_layout, null);
final ImageView toastIcon = (ImageView) toastLayout.findViewById(R.id.toast_icon);
final TextView toastTextView = (TextView) toastLayout.findViewById(R.id.toast_text);
Drawable drawableFrame;
if (shouldTint)
drawableFrame = ToastyUtils.tint9PatchDrawableFrame(context, tintColor);
else
drawableFrame = ToastyUtils.getDrawable(context, R.drawable.toast_frame);
ToastyUtils.setBackground(toastLayout, drawableFrame);
if (withIcon) {
if (icon == null) {
throw new IllegalArgumentException("Avoid passing 'icon' as null if 'withIcon' is set to true");
}
ToastyUtils.setBackground(toastIcon, icon);
} else {
toastIcon.setVisibility(View.GONE);
}
toastTextView.setTextColor(textColor);
toastTextView.setText(message);
toastTextView.setTypeface(Typeface.create(TOAST_TYPEFACE, Typeface.NORMAL));
currentToast.setView(toastLayout);
currentToast.setDuration(duration);
return currentToast;
}
}
ToastyUtils .java
final class ToastyUtils {
private ToastyUtils() {
}
static Drawable tint9PatchDrawableFrame(@NonNull Context context, @ColorInt int tintColor) {
final NinePatchDrawable toastDrawable = (NinePatchDrawable) getDrawable(context, R.drawable.toast_frame);
toastDrawable.setColorFilter(new PorterDuffColorFilter(tintColor, PorterDuff.Mode.SRC_IN));
return toastDrawable;
}
static void setBackground(@NonNull View view, Drawable drawable) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
view.setBackground(drawable);
} else {
view.setBackgroundDrawable(drawable);
}
}
static Drawable getDrawable(@NonNull Context context, @DrawableRes int id) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
return context.getDrawable(id);
} else {
return context.getResources().getDrawable(id);
}
}
}
Toasty根本方法
Toast custom(@NonNull Context context, @NonNull String message, Drawable icon,
@ColorInt int textColor, @ColorInt int tintColor, int duration,
boolean withIcon, boolean shouldTint) {
final Toast currentToast = new Toast(context);
final View toastLayout = ((LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE))
.inflate(R.layout.toast_layout, null);
final ImageView toastIcon = (ImageView) toastLayout.findViewById(R.id.toast_icon);
final TextView toastTextView = (TextView) toastLayout.findViewById(R.id.toast_text);
Drawable drawableFrame;
if (shouldTint) {
drawableFrame = ToastyUtils.tint9PatchDrawableFrame(context, tintColor);
} else {
drawableFrame = ToastyUtils.getDrawable(context, R.drawable.toast_frame);
}
ToastyUtils.setBackground(toastLayout, drawableFrame);
if (withIcon) {
if (icon == null) {
throw new IllegalArgumentException("Avoid passing 'icon' as null if 'withIcon' is set to true");
}
ToastyUtils.setBackground(toastIcon, icon);
} else {
toastIcon.setVisibility(View.GONE);
}
toastTextView.setTextColor(textColor);
toastTextView.setText(message);
toastTextView.setTypeface(Typeface.create(TOAST_TYPEFACE, Typeface.NORMAL));
currentToast.setView(toastLayout);
currentToast.setDuration(duration);
return currentToast;
}
参数2:文本提示语
参数3:左边小图标
参数4:文字颜色
参数5:背景颜色
参数6:提示时长
参数7:是否显示左边小图标
参数8:是否使用背景色
Drawable yourIconDrawable = getResources().getDrawable(R.drawable.ic_pets_white_48dp);
Toasty.custom(MainActivity.this, "I'm a custom Toast", yourIconDrawable, Color.GREEN, Color.CYAN, 3000, true, true).show();