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)我们常传的时间参数LENGTH_SHORT和LENGTH_LONG具体时间分别是:2秒和3.5秒
/**
*@作者 zsk
*创建时间 2019/8/6 17:16
*描述 Toast封装
*/
public class ToastUtils {
private static Toast toast;
/**
* 短时间显示Toast
*/
public static void showSToast(Context context, CharSequence message) {
if (toast == null) {
toast = Toast.makeText(context, message, Toast.LENGTH_SHORT);
} else {
toast.setText(message);
}
toast.show();
}
/**
* 长时间时间显示Toast
*/
public static void showToast(Context context, CharSequence message) {
if (toast == null) {
toast = Toast.makeText(context, message, Toast.LENGTH_LONG);
} else {
toast.setText(message);
}
toast.show();
}
/**
* 自定义Toast的时间
*/
public static void showToast(Context context, CharSequence message, int duration) {
if (toast==null){
toast = Toast.makeText(context, message, duration);
}else{
toast.setText(message);
}
toast.show();
}
/**
* 自定义Toast的位置
*/
public static void showToast(Context context, CharSequence message, int duration,int gravity, int xOffset, int yOffset) {
if(toast==null) {
toast = Toast.makeText(context, message, duration);
}else{
toast.setText(message);
}
toast.setGravity(gravity,xOffset,yOffset);
toast.show();
}
/**
* 自定义Toast的位置
* 时常short
*/
public static void showSToast(Context context, CharSequence message,int gravity, int xOffset, int yOffset) {
if(toast==null) {
toast = Toast.makeText(context, message, Toast.LENGTH_SHORT);
}else{
toast.setText(message);
}
toast.setGravity(gravity,xOffset,yOffset);
toast.show();
}
/**
* 自定义Toast的位置
* 时常long
*/
public static void showLToast(Context context, CharSequence message,int gravity, int xOffset, int yOffset) {
if(toast==null) {
toast = Toast.makeText(context, message, Toast.LENGTH_LONG);
}else{
toast.setText(message);
}
toast.setGravity(gravity,xOffset,yOffset);
toast.show();
}
/**
* 提示根据ResId关联字符串
* 时常short
*/
public static void showSToast(Context context, int resId) {
if (toast==null) {
toast = Toast.makeText(context, resId, Toast.LENGTH_SHORT);
}else{
toast.setText(resId);
}
toast.show();
}
/**
* 提示根据ResId关联字符串
* 时常long
*/
public static void showLToast(Context context, int resId) {
if (toast==null){
toast = Toast.makeText(context, resId, Toast.LENGTH_LONG);
}else{
toast.setText(resId);
}
toast.show();
}
}