Android自定义Toast,多次弹出时取消上次弹出,最后一次弹出为准详解编程语言

Android的Toast用队列管理弹出的消息,这个自定义的Toast用于频繁弹出Toast时取消之前的toast,只显示最后一个Toast,前后文字长度相差较大时,两个Toast提示的切换不太理想,大神们有啥建议还望不吝赐教。
  
public abstract class Toast { 
    public static final int LENGTH_SHORT = android.widget.Toast.LENGTH_SHORT; 
    public static final int LENGTH_LONG = android.widget.Toast.LENGTH_LONG; 
   
    private static android.widget.Toast toast; 
    private static Handler handler = new Handler(); 
   
    private static Runnable run = new Runnable() { 
        public void run() { 
            toast.cancel(); 
        } 
    }; 
   
    private static void toast(Context ctx, CharSequence msg, int duration) { 
        handler.removeCallbacks(run); 
        // handler的duration不能直接对应Toast的常量时长,在此针对Toast的常量相应定义时长 
        switch (duration) { 
        case LENGTH_SHORT:// Toast.LENGTH_SHORT值为0,对应的持续时间大概为1s 
            duration = 1000; 
            break; 
        case LENGTH_LONG:// Toast.LENGTH_LONG值为1,对应的持续时间大概为3s 
            duration = 3000; 
            break; 
        default: 
            break; 
        } 
        if (null != toast) { 
            toast.setText(msg); 
        } else { 
            toast = android.widget.Toast.makeText(ctx, msg, duration); 
        } 
        handler.postDelayed(run, duration); 
        toast.show(); 
    } 
   
    /** 
     * 弹出Toast 
     *  
     * @param ctx 
     *            弹出Toast的上下文 
     * @param msg 
     *            弹出Toast的内容 
     * @param duration 
     *            弹出Toast的持续时间 
     */ 
    public static void show(Context ctx, CharSequence msg, int duration) 
            throws NullPointerException { 
        if (null == ctx) { 
            throw new NullPointerException("The ctx is null!"); 
        } 
        if (0 > duration) { 
            duration = LENGTH_SHORT; 
        } 
        toast(ctx, msg, duration); 
    } 
   
    /** 
     * 弹出Toast 
     *  
     * @param ctx 
     *            弹出Toast的上下文 
     * @param msg 
     *            弹出Toast的内容的资源ID 
     * @param duration 
     *            弹出Toast的持续时间 
     */ 
    public static void show(Context ctx, int resId, int duration) 
            throws NullPointerException { 
        if (null == ctx) { 
            throw new NullPointerException("The ctx is null!"); 
        } 
        if (0 > duration) { 
            duration = LENGTH_SHORT; 
        } 
        toast(ctx, ctx.getResources().getString(resId), duration); 
    } 
   
} 
  

原创文章,作者:Maggie-Hunter,如若转载,请注明出处:https://blog.ytso.com/tech/pnotes/10325.html

(0)
上一篇 2021年7月19日 10:10
下一篇 2021年7月19日 10:10

相关推荐

发表回复

登录后才能评论