博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android自定义Toast,并解决toast不重复显示
阅读量:6089 次
发布时间:2019-06-20

本文共 2042 字,大约阅读时间需要 6 分钟。

hot3.png

1、Android自带的Toast样式固定,这里我们对其简单的封装。自定义一个适应我们需求的Toast

private void createToastWindow(String text) {		LayoutInflater inflater = LayoutInflater.from(App.getContext());		View view = inflater.inflate(R.layout.toast_layout, null);		TextView tv = (TextView) view.findViewById(R.id.pop_view);		tv.setText(text);		Toast toast = new Toast(getApplicationContext());		view.setLayoutParams(new LinearLayout.LayoutParams(				android.widget.LinearLayout.LayoutParams.MATCH_PARENT,				android.widget.LinearLayout.LayoutParams.MATCH_PARENT));		toast.setView(view);		toast.setGravity(Gravity.TOP, 0, (int) App.getContext().getResources()				.getDimension(R.dimen.titlebarHeight));		toast.show();	}

这段代码即完成此功能,toast_layout.xml就是我们toast的界面,这里我们可以实现我们想要的任何效果,也可以显示在屏幕的任何位置。

2、Android的Taost机制是建立在系统级上的,不是依托那个界面的,这样会导致我们的Toast会重复显示。倘若我们不断点击一个按钮然后Toast会一直显示,并且一个接一个需要等许久才能消失。这里我们来解决此问题。

解决此问题首先需要在Activity中定义一个Toast对象,我想这里一般人都会封装在基类中,本人推荐这样做。

private Toast toast;

然后穿件Toast的函数变成如下所示

private void createToastWindow(String text) {		LayoutInflater inflater = LayoutInflater.from(App.getContext());		View view = inflater.inflate(R.layout.toast_layout, null);		TextView tv = (TextView) view.findViewById(R.id.pop_view);		tv.setText(text);		if(toast == null){		    Toast toast = new Toast(getApplicationContext());		}	        view.setLayoutParams(new LinearLayout.LayoutParams(				android.widget.LinearLayout.LayoutParams.MATCH_PARENT,				android.widget.LinearLayout.LayoutParams.MATCH_PARENT));		toast.setView(view);		toast.setGravity(Gravity.TOP, 0, (int) App.getContext().getResources()				.getDimension(R.dimen.titlebarHeight));		toast.show();	}

和上面相比就改变了这里 

if(toast == null){		    Toast toast = new Toast(getApplicationContext());		}

这样我们界面在拥有一个Toast的时候则不会去不断的创建Toast,同时Toast的显示的文字会被改变。

到此比较简单的自定义Toast和解决Toast的重复显示的问题得到解决,这里还是用了原声的Toast的机制,只不过是在此基础上稍作控制,当然这也能满足我们大多数时候的需求了。但若你想控制Toast的显示进入退出动画,那你需要深入了解Toast的机制,查看其源码重写Toast这样才可以,主要方法如下:

params = new WindowManager.LayoutParams();

params.windowAnimations = R.anim.enter;

转载于:https://my.oschina.net/u/579493/blog/542513

你可能感兴趣的文章
host
查看>>
Android--SurfaceView播放视频
查看>>
MAVEN 搭建APPFUSE
查看>>
面向对象初步认识
查看>>
uptime
查看>>
数据结构之二叉树
查看>>
ISO镜像安装Ubuntu 13.04 64位,启动菜单制作
查看>>
iOS : 判断运行设备类型是否是iPad
查看>>
小菜学习Winform(一)贪吃蛇2
查看>>
loj 1406(状态压缩)
查看>>
C#中协变与抗变(逆变)
查看>>
南昌PHP程序员的工资水平据说可达到8000了
查看>>
架构:The Onion Architecture : part 2(洋葱架构:第二篇)(转载)
查看>>
Java.util.date 与 java.sql.date区别和转换
查看>>
lua--clone
查看>>
和求余运算巧妙结合的jns指令
查看>>
MS SQL统计信息浅析下篇
查看>>
struts2+hibernate-jpa+Spring+maven 整合(2)
查看>>
Linux中的文件特殊权限
查看>>
CentOS 6.4 下安装vsftpd
查看>>