封装实用的Toast工具类

本文深入解析了Toast在Android系统中的工作原理,包括底层Handler机制、WindowManager的使用、Toast显示与隐藏的控制流程,以及自定义Toast的时间、位置等方法。提供了实用的Toast封装示例代码,帮助开发者更高效地使用Toast。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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();
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值