toast是android中常用的组件,下面介绍下toast使用的几种方式和注意事项。
toast的使用方式简单来说有下面五种:
1、默认的显示
// 第一个参数:当前的上下文环境。可用getapplicationcontext()或activity的context // 第二个参数:要显示的字符串。也可是r.string中字符串id // 第三个参数:显示的时间长短。toast默认的有两个length_long(长)和length_short(短),也可以使用毫秒如2000ms toast toast=toast.maketext(mcontext, "默认的toast", toast.length_short); //显示toast信息 toast.show();
2、自定义位置显示(值改变位置)
toast toast=toast.maketext(mcontext, "自定义显示位置的toast", toast.length_short); //第一个参数:设置toast在屏幕中显示的位置。这里设置是居中靠顶 //第二个参数:相对于第一个参数设置toast位置的横向x轴的偏移量,正数向右偏移,负数向左偏移 //第三个参数:相对于第一个参数设置toast位置的纵向y轴的偏移量,正数向下偏移,负数向上偏移 //如果你设置的偏移量超过了屏幕的范围,toast将在屏幕内靠近超出的那个边界显示 toast.setgravity(gravity.top|gravity.center, -50, 100); //屏幕居中显示,x轴和y轴偏移量都是0 //toast.setgravity(gravity.center, 0, 0); toast.show();
3、带图片显示(能够显示一个图标)
toast toast=toast.maketext(mcontext, "显示带图片的toast", 2000); toast.setgravity(gravity.center, 0, 0); //创建图片视图对象 imageview imageview= new imageview(mcontext); //设置图片 imageview.setimageresource(r.drawable.image); //获得toast的布局 linearlayout toastview = (linearlayout) toast.getview(); //设置此布局为横向的 toastview.setorientation(linearlayout.horizontal); //将imageview在加入到此布局中的第一个位置 toastview.addview(imageview, 0); toast.show();
4、完全自定义显示
layoutinflater inflater = getlayoutinflater(); //通过制定xml文件及布局id来填充一个视图对象 view layout = inflater.inflate(r.layout.test,(viewgroup)findviewbyid(r.id.toast)); imageview image = (imageview) layout.findviewbyid(r.id.image); //设置布局中图片视图中图片 image.setimageresource(r.drawable.toast_image); textview title = (textview) layout.findviewbyid(r.id.title); //设置标题 title.settext("标题"); textview text = (textview) layout.findviewbyid(r.id.content); //设置内容 text.settext("自定义toast"); toast toast= new toast(mcontext); toast.setgravity(gravity.center , 0, 0); toast.setduration(toast.length_long); toast.setview(layout); toast.show();
5、在其他线程中调用显示
toast只能运行在主ui线程,所以在线程中使用时必须结合handler,通过发消息的方式最终在主线程显示toast
handler handler=new handler(){ @override public void handlemessage(message msg) { int what=msg.what; switch (what) { case 1: showtoast(); break; } }; public void showtoast(){ toast toast=toast.maketext(getapplicationcontext(), "toast在其他线程中显示", toast.length_short); toast.show(); } runnable runnable = new runnable(){ @override public void run() { handler.sendemptymessage(1); } }
toast使用注意事项:
1、toast只能在ui线程当中使用,在非ui线程使用会抛异常;
2、使用toast时最好定义一个全局的 toast 对象,这样可以避免连续显示
toast 时不能取消上一次 toast 消息的情况(如果你有连续弹出 toast 的情况,避免
使用 toast.maketext)。
取消toast的方法为toast.cancel();