Toast和Handler的间隔使用实例
程序员文章站
2023-11-16 17:38:22
本人在项目开发过程,需要实现一个“来电归属地”的功能,因此用到了toast。但toast的显示时间,不受我们控制,系统只提供了两个配置...
本人在项目开发过程,需要实现一个“来电归属地”的功能,因此用到了toast。但toast的显示时间,不受我们控制,系统只提供了两个配置参数,分别是length_long,length_short。因为要让toast长期显示,需要另外一个线程,每隔一个时间段,就循环显示一次。
先说明一下,本次需要用到handle机制,因此不了解或者不熟悉handle的同学,请先去看看android上的handle机制!
下面开始讲解代码实现详情!
先写一个包装类,就叫mytoast吧,如下
复制代码 代码如下:
public class mytoast {
private context mcontext = null;
private toast mtoast = null;
private handler mhandler = null;
private runnable mtoastthread = new runnable() {
@override
public void run() {
mtoast.show();
mhandler.postdelayed(mtoastthread, 3000);//每隔3秒显示一次,经测试,这个时间间隔效果是最好
}
};
public mytoast(context context){
mcontext = context;
mhandler = new handler(mcontext.getmainlooper());
mtoast = toast.maketext(mcontext, "*@飞翔", toast.length_long);
}
public void settext(string text){
mtoast.settext(text);
}
public void show(){
mhandler.post(mtoastthread);
}
public void cancel() {
mhandler.removecallbacks(mtoastthread);//先把显示线程删除
mtoast.cancel();// 把最后一个线程的显示效果cancel掉,就一了百了了
}
}
mainactivity 的代码如下:
复制代码 代码如下:
public class mainactivity extends activity implements onclicklistener{
private button show_button;
private button cancel_button;
private mytoast mytoast;
/** called when the activity is first created. */
@override
public void oncreate(bundle savedinstancestate) {
super.oncreate(savedinstancestate);
setcontentview(r.layout.main);
show_button = (button) findviewbyid(r.id.show_button);
cancel_button = (button) findviewbyid(r.id.cancel_button);
show_button.setonclicklistener(this);
cancel_button.setonclicklistener(this);
mytoast = new mytoast(this);
}
@override
public void onclick(view v) {
if(v == show_button){
mytoast.show();
}else if (v == cancel_button) {
mytoast.cancel();
}
}
}