精华内容
下载资源
问答
  • 常规使用方法这里不做说明,继前一篇博客《Android中Toast全屏显示》 ,其中抛砖引玉的给出一个简单的实现Toast全屏显示的方法后,发现无法控制Toast显示时长。虽然Toast中有setDuration(int duration)接口,但是...

    Toast是Android中使用频率较高的弹窗提示手段,使用起来简单、方便。常规使用方法这里不做说明,继前一篇博客《Android中Toast全屏显示》 ,其中抛砖引玉的给出一个简单的实现Toast全屏显示的方法后,发现无法控制Toast的显示时长。虽然Toast中有setDuration(int duration)接口,但是跟踪代码发现,设置的时间没起作用,只有系统默认的两个时间LENGTH_DURATION = 3500毫秒,SHORT_DURATION = 2000毫秒。也就是说,无论我们设置多长时间,最终影响Toast弹窗时间的只有Toast.LENGTH_LONG和Toast.LENGTH_SHORT两个参数。

    目前解决该问题的方法主要有两个:

    1、利用反射原理,通过控制Toast的show()和hide()接口来控制显示时间,可参见博客《利用反射机制控制Toast的显示时间》。不过该方法只对Android4.0以下的系统有效,通过模拟器实测,也是如此。当前系统基本都在Android4.0以上,该方法过于老旧。

    2、利用WindowManager的addView()方法动态刷屏,可看见博客《Android自定义Toast,可设定显示时间》 。该方法被很多软件用来显示浮动窗口和图片的动态悬浮效果,如360手机软件和一些手游软件。在Android4.0上是一种不错的选择。当然,对于遇到系统默认把悬浮窗口功能关闭的手机,这招可能就不灵了。

    通过分析Toast的显示原理和弹窗控制逻辑,本人借助Handler和Runnable机制,也成功实现了对Toast显示任意自定义时长。代码是在Toast全屏显示的基础上修改而来,贴出如下:

    package com.dls.nltest;

    import android.content.Context;

    import android.os.Handler;

    import android.util.DisplayMetrics;

    import android.util.Log;

    import android.view.Gravity;

    import android.view.WindowManager;

    import android.widget.LinearLayout;

    import android.widget.TextView;

    import android.widget.Toast;

    import android.widget.LinearLayout.LayoutParams;

    public class GenericToast{

    private static final String TAG = "GenericToast";

    private static final int TOAST_TEXTSIZE = 20;

    /** {@link Toast#LENGTH_SHORT} default time is 3500ms */

    private static final int LENGTH_SHORT_TIME = 2000;

    private static Context mContext = null;

    private static Toast mToast = null;

    private static TextView mTextView = null;

    private static int mDuration = 0;

    private static CharSequence mText = null;

    private Handler mHandler = new Handler();

    private GenericToast(Context context) {

    mContext = context;

    }

    public static GenericToast makeText(Context context, CharSequence text, int duration){

    GenericToast instance = new GenericToast(context);

    mContext = context;

    mDuration = duration;

    mText = text;

    return instance;

    }

    private static void getToast(Context context, CharSequence text){

    mToast = Toast.makeText(context, null, Toast.LENGTH_LONG);

    mToast.setGravity(Gravity.CENTER, 0, 0);

    LinearLayout toastView = (LinearLayout)mToast.getView();

    // Get the screen size with unit pixels.

    WindowManager wm = (WindowManager)context.getSystemService(Context.WINDOW_SERVICE);

    DisplayMetrics outMetrics = new DisplayMetrics();

    wm.getDefaultDisplay().getMetrics(outMetrics);

    mTextView = new TextView(context);

    LayoutParams vlp = new LayoutParams(outMetrics.widthPixels,

    outMetrics.heightPixels);

    vlp.setMargins(0, 0, 0, 0);

    mTextView.setLayoutParams(vlp);

    mTextView.setTextSize(TOAST_TEXTSIZE);

    mTextView.setText(text);

    mTextView.setGravity(Gravity.CENTER);

    toastView.addView(mTextView);

    }

    /**

    * Before call this method, you should call {@link makeText}.

    *

    * @return Toast display duration.

    */

    public int getDuration(){

    return mDuration;

    }

    public void show(){

    Log.d(TAG, "Show custom toast");

    mHandler.post(showRunnable);

    }

    public void hide(){

    Log.d(TAG, "Hide custom toast");

    mDuration = 0;

    if(mToast != null){

    mToast.cancel();

    }

    }

    private Runnable showRunnable = new Runnable(){

    @Override

    public void run() {

    if(mToast != null){

    mTextView.setText(mText);

    }else{

    getToast(mContext, mText);

    }

    if(mDuration != 0){

    mToast.show();

    }else{

    Log.d(TAG, "Hide custom toast in runnable");

    hide();

    return;

    }

    if(mDuration > LENGTH_SHORT_TIME){

    mHandler.postDelayed(showRunnable, LENGTH_SHORT_TIME);

    mDuration -= LENGTH_SHORT_TIME;

    }else{

    mHandler.postDelayed(showRunnable, mDuration);

    mDuration = 0;

    }

    }

    };

    }

    Toast弹窗10s,测试代码如下:

    GenericToast mGToast = GenericToast.makeText(this, "I am generic toast", 10 * 1000);

    mGToast.show();

    如果需要终止弹窗,只要在需要的地方调用hide()即可。

    以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

    您可能感兴趣的文章:android自定义Toast设定显示时间

    使用反射机制控制Toast的显示时间

    Android 自定义 Toast 显示时间

    Android开发技巧之永不关闭的Toast信息框(长时间显示而非系统关闭)

    Toast类避免显示时间叠加的方法

    展开全文
  • Android 自定义 Toast 显示时间 ... * Toast自定义显示时间 * 使用方法 * 1.先初始化类 MyToast myToast = new MyToast(this); * 2.显示消息 myToast.setText(要显示的内容); //设置要显示的内容 *
  • android 自带的toast显示...这里有一个简单的方法可以实现自定义显示时间Toastpublic static void MyToast(Context context,String message,long time){ final Toast toast=Toast.makeText(context, message, Toa

    android 自带的toast显示时间是固定的,在方法里面不能设置显示时间长短
    这里有一个简单的方法可以实现自定义显示时间的Toast

    public static void MyToast(Context context,String message,long time){
            final Toast toast=Toast.makeText(context, message, Toast.LENGTH_LONG);
            final Timer timer=new Timer();
            timer.schedule(new TimerTask() {
    
                @Override
                public void run() {
                    // TODO Auto-generated method stub
                    toast.show();
                }
            }, 0, 3000);
            new Timer().schedule(new TimerTask() {
    
                @Override
                public void run() {
                    // TODO Auto-generated method stub
                    toast.cancel();
                    timer.cancel();
                }
            }, time);
        }
    展开全文
  • 主要为大家详细介绍了android自定义Toast设定显示时间,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • 使用Timer自定义Toast显示时间。 自带的: private static final int LONG_DELAY = 3500; // 3.5 seconds private static final int SHORT_DELAY = 2000; // 2 seconds 代码: 方法: public vo

    说明:

    使用Timer自定义Toast显示时间。

    自带的:

    private static final int LONG_DELAY = 3500; // 3.5 seconds           

    private static final int SHORT_DELAY = 2000; // 2 seconds

    代码:

    方法:

     

    public void showMyToast(final Toast toast, final int cnt) {
            final Timer timer = new Timer();
            timer.schedule(new TimerTask() {
                @Override
                public void run() {
                    toast.show();
                }
            }, 0, 3000);
            new Timer().schedule(new TimerTask() {
                @Override
                public void run() {
                    toast.cancel();
                    timer.cancel();
                }
            }, cnt );
        }
     

     

    调用:

     

    Toast toast=Toast.makeText(RegistActivity.this, "这是可以随意设置时间的Toast", Toast.LENGTH_LONG);
    showMyToast(toast, 10*1000);
     

     

    注意:

    1、创建Toast对象的时候,要设置Toast.LENGTH_LONG,最后不要调用show()方法

    2、showMyToast()方法,传入两个参数,第一个参数为我们创建的Toast对象,第二个参数为我们想要设置显示的毫秒数

     


     

    ฅ՞•ﻌ•՞ฅ ~ 厚着脸皮要个赞赏哈 ~ ฅ՞•ﻌ•՞ฅ

     

    展开全文
  • /* 显示toast,自己定义显示长短。 * param1:activity 传入context * param2:word 我们需要显示toast的内容 * param3:time length long类型,我们传入的时间长度(如500)*/
  • Android Toast 只支持两种时间 LENGTH_SHORT 2 秒,LENGTH_LONG 3.5 秒,但是有场景需要自定义显示时长就会有问题,所以需要自定义实现,下边是自定义的类,通过定时器来实现长时间的显示。 /** * 功能描述:自定义...

    Android Toast 只支持两种时间 LENGTH_SHORT 2 秒,LENGTH_LONG 3.5 秒,但是有场景需要自定义显示时长就会有问题,所以需要自定义实现,下边是自定义的类,通过定时器来实现长时间的显示。

    /**
     * 功能描述:自定义toast显示时长
     */
    public class CustomToast {
        private Toast mToast;
        private TimeCount timeCount;
        private String message;
        private int gravity;
        private Context mContext;
        private Handler mHandler = new Handler();
        private boolean canceled = true;
    
        public CustomToast(Context context, int gravity, String msg) {
            message = msg;
            mContext = context;
            this.gravity = gravity;
        }
    
        /**
         * 自定义时长、居中显示toast
         *
         * @param duration
         */
        public void show(int duration) {
            timeCount = new TimeCount(duration, 1000);
            if (canceled) {
                timeCount.start();
                canceled = false;
                showUntilCancel();
            }
        }
    
        /**
         * 隐藏toast
         */
        public void hide() {
            if (mToast != null) {
                mToast.cancel();
            }
            if (timeCount != null) {
                timeCount.cancel();
            }
            canceled = true;
        }
    
        private void showUntilCancel() {
            if (canceled) { //如果已经取消显示,就直接return
                return;
            }
            mToast = ToastUtil.getToast(mContext, message, Toast.LENGTH_LONG, gravity);
            mToast.setGravity(gravity, 0, 0);
            mToast.show();
            mHandler.postDelayed(new Runnable() {
                @Override
                public void run() {
                    showUntilCancel();
                }
            }, 3500);
        }
    
        /**
         * 自定义计时器
         */
        private class TimeCount extends CountDownTimer {
    
            public TimeCount(long millisInFuture, long countDownInterval) {
                super(millisInFuture, countDownInterval); //millisInFuture总计时长,countDownInterval时间间隔(一般为1000ms)
            }
    
            @Override
            public void onTick(long millisUntilFinished) {
            }
    
            @Override
            public void onFinish() {
                hide();
            }
        }
    }
    

    初始化构造函数需要传入显示的消息和显示的位置(上 中 下),然后调用show方法,如果还没到时间想隐藏可以调用hide方法
    调用方法如下:

    if (customToast != null) customToast.hide();
    customToast = new CustomToast(context, Gravity.BOTTOM, title);
    customToast.show(duration);
    

    时长可以任意传入,都可以按需求显示出来。

    展开全文
  • 说明:  1:好记性,不如写博客 ... 3:自定义显示的时长,测试过最长显示时间为3s  4:自定义显示的位置 代码: private void toast(Context ctx, String msg, int time) { if (msg.equals("") || msg
  • Adroid中Toast自定义显示时间

    万次阅读 2016-07-14 14:28:34
    常规使用方法这里不做说明,继前一片博客《Android中Toast全屏显示》,其中抛砖引玉的给出一个简单的实现Toast全屏显示的方法后,发现无法控制Toast显示时长。虽然Toast中有setDuration(int duration)接口,但是...
  • Toast自定义视图,设置显示时间的方法,相关博文:http://www.cnblogs.com/tianzhijiexian/p/3855557.html
  • 简易Toast工具方法 private void displayToastTip(final String tip) { runOnUiThread(new Runnable() { @Override public void run() { Toast.makeText(SfzShiBieActivity.this, tip...
  • 效果是弹出一个新的toast会代代替之前的toast,让toast显示时间不会增加.public class ToastUtil {/*** 单例对象*/private static Toast toast;/*** 单例toast显示模式** @param context 上下文* @param content ...
  • Toast拓展--自定义显示时间和动画

    万次阅读 热门讨论 2016-07-05 10:07:28
    我们在Android应用开发中经常会需要在界面上弹出一个对界面操作无影响的小提示框来提示用户一些信息,这时候一般都会使用Android原生的Toast类,一开始觉得,挺好用的,但是...显示时间也只有两种选择,好像不太够用。
  • Toast自定义显示时长的解决方案

    万次阅读 2016-09-02 10:58:25
    关于Toast,大家可能熟的不能再熟了,但是都知道它有一个缺点,就是没有办法控制显示时长,默认有俩种状态, Toast.LENGTH_LONG 默认显示3.5秒 Toast.LENGTH_SHORT 默认显示2秒。 源码就不说了,直接说解决方式...
  • ublic class CustomToast { public static final int LENGTH_MAX = -1; private boolean mCanceled = true; private Handler mHandler; private Context mContext;... private Toast mToast;
  • 主要介绍了Android 自定义缩短Toast显示时间,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
  • Toast有两种显示布局方式,一种最常见调用Toast.makeText() ,看源码是这样写的public static Toast makeText(Context context, CharSequence text, @Duration int duration) {Toast result = new Toast(context)...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 20,077
精华内容 8,030
关键字:

toast自定义显示时间