欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Android利用Timer定时器延长Toast的显示时间

程序员文章站 2022-06-09 13:47:55
...

因为在调用AlertDialog的时候,出现Theme不对的问题,导致我没法调用Dialog,这也是我比较愁Android的一件事,为啥一个Dialog会跟Theme扯上关系。
然后我只能打Toast的主意了。奈何Toast的显示延时是固定的,除非你自己自定义,本来一两行的代码,自定义之后就多了,懒啊,于是就想继续试试Toast,最简单的就是自己new Toast,不过不行,因为它是在maketext里面才创建的界面。看看它的实现代码就可以知道了。
你还必须得调用makeText才能使用Toast弹窗。

public static Toast makeText(@NonNull Context context, @Nullable Looper looper,
            @NonNull CharSequence text, @Duration int duration) {
        Toast result = new Toast(context, looper);

        LayoutInflater inflate = (LayoutInflater)
                context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View v = inflate.inflate(com.android.internal.R.layout.transient_notification, null);
        TextView tv = (TextView)v.findViewById(com.android.internal.R.id.message);
        tv.setText(text);

        result.mNextView = v;
        result.mDuration = duration;

        return result;
    }

此路不通之后,我们就想到了使用延时循环。那就从TimerTask入手就行了。
解决办法如下:

final StringBuilder stringBuilder = new StringBuilder();
final Timer timer = new Timer();
TimerTask timerTask = new TimerTask() {
                @Override
                public void run() {
                    stringBuilder.append("0");
                    if( stringBuilder.length() > 10 ){
                        timer.cancel();
                    }
                    Log.i(TAG, "run: "+stringBuilder.length());
                    activity.runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            Toast toast = Toast.makeText(context,"配置文件找不到",Toast.LENGTH_LONG);
                            toast.setGravity(Gravity.CENTER,0,0);
                            toast.show();
                        }
                    });
                    
                }
            };
            timer.schedule(timerTask,0,500);
        }