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);
}
下一篇: java设计模式--备忘录模式