前言
Android中的Toast可谓是最长用的东西之一了,用起来也相当简单,也就是一行代码的事情。但是它有默认的样子,也就是在屏幕的底部弹出一个黑色半透明的框。但是有时候设计人员会觉得它不好看,不够多样性。所以这篇文章就封装一个自己的可变的Toast。
封装ToastUtils
public class ToastUtils {
/**
* 这里是方法的重载,用于开放不同的参数
*
* @param messageID
*/
public static void showToast(int messageID) {
showToast(App.getInstance(), messageID);
}
public static void showToast(String message) {
showToast(App.getInstance(), message);
}
public static void showToast(int messageID, int duration) {
showToast(App.getInstance(), messageID, duration);
}
public static void showToast(String message, int duration) {
showToast(App.getInstance(), message, duration);
}
public static void showToast(Context context, int resId) {
showToast(context, context.getString(resId), Toast.LENGTH_SHORT);
}
public static void showToast(Context context, String message) {
showToast(context, message, Toast.LENGTH_SHORT);
}
public static void showToast(Activity context, int resId) {
showToast(context, context.getString(resId), Toast.LENGTH_SHORT);
}
public static void showToast(Activity context, int resId,int duration) {
showToast(context, context.getString(resId), duration);
}
private static void showToast(Activity context, String message) {
showToast(context, message, Toast.LENGTH_SHORT);
}
private static void showToast(Context context, int resId, int duration) {
///Toast.makeText(context, resId, duration).show();
showToast(context, context.getString(resId), duration);
}
static Toast toast;
static TextView contentView;
/**
* 自定义Toast的样式与位置
*
* @param context
* @param message
* @param duration
*/
private static void showToast(Context context, String message, int duration) {
if (context == null) {
return;
}
try {
if (toast == null || contentView == null) {
int dp30 = DensityUtils.dp2px(context, 30);
int dp20 = DensityUtils.dp2px(context, 20);
contentView = new TextView(context);
contentView.setGravity(Gravity.CENTER);
contentView.setBackgroundResource(R.drawable.bg_toast);
contentView.setTextSize(16);
contentView.setTextColor(context.getResources().getColor(R.color.white));
contentView.setPadding(dp30, dp20, dp30, dp20);
toast = new Toast(context);
toast.setGravity(Gravity.CENTER_VERTICAL, 0, 0);
toast.setView(contentView);
toast.setDuration(duration);
}
contentView.setText(message);
toast.show();
} catch (Exception e) {
Toast.makeText(context, message, duration).show();
e.printStackTrace();
}
}
}
以上的代码的重中之重也就在最后一个showToast方法里了。这里通过toast.setGravity(Gravity.CENTER_VERTICAL, 0, 0);来设置了Toast在页面中的位置。点进去看一眼源码:
public void setGravity(int gravity, int xOffset, int yOffset) {
throw new RuntimeException("Stub!");
}
这三个参数不难理解。
通过toast.setView(contentView);来设置Toast的样式,结合自定义View就可以创造出各种各样的Toast。