前言
在Android中Toast是比较常用的提示方式,他足够简单轻量(没有交互能力)。
官方给的定义是:
当视图显示给用户,在应用程序中显示为浮动。和Dialog不一样的是,它永远不会获得焦点,无法被点击。用户将可能是在中间键入别的东西。Toast类的思想就是尽可能不引人注意,同时还向用户显示信息,希望他们看到。而且Toast显示的时间有限,Toast会根据用户设置的显示时间后自动消失。
但是如果直接使用的话也会有不少问题:由于你Toast样式是依赖于主题这个导致你在不同的手机上风格都不太一样,另外就是如果你不去处理的话一直重复点击响应Toast就会一直显示用户的体验效果也很不理想。
还有就是会为了满足需求自定义一写样式:
if (context != null) {
if (toast == null) {
toast = Toast.makeText(context,
msg,
Toast.LENGTH_LONG);
} else {
toast.setText(msg);
}
toast.show();
}
大家可以看到我这里不是直接调用Toast.makeText(context,msg,Toast.LENGTH_LONG).show();
因为我们知道当吐司一直存在的时候也就是我们定义的全局Toast变量不为空的时候,所以这里我们不是直接点show(),而是类似但是模式去判断也就是当我们Toast对象爱你不存在的时候才会去调用: toast = Toast.makeText(context,
msg,
Toast.LENGTH_LONG);
实例化对象。
通过这步处理我们Toast对象就不会随我点击而去实例化,而是当你点击触发Toast对象的时候他首先去判断这个对象是否存在当不存在的时候再去实例化。
自定义样式
上面讲的是我们如何去防止重复去Toast这里来讲一讲简单的自定义样式:其实自定义样式也不难,就是给我们的Toast去设置自己的布局:
还是拿到我们的Toast对象:因为Toast留给我们设置位置、显示的布局的方法:
toast.setView();//自定义显示的布局
toast.setGravity();//显示的位置
toast.setText();//显示的内容
tosat.setDuration();//显示的时长 等等
既然上面讲到防止重复弹窗那我们这里就结合使用:
if (context != null) {
if (toast == null) {
toast = new Toast(context);
//设置自定义Toast的位置
View layout = View.inflate(context, R.layout.toast, null);
mTextView = layout.findViewById(R.id.message);
mTextView.setText(msg);
toast.setView(layout);
//设置Toast的位置在屏幕中间
toast.setGravity(Gravity.CENTER, 0, 0);
toast.setDuration(Toast.LENGTH_LONG);
} else {
mTextView.setText(msg);
}
toast.show();
}
到这就大功告成了!
网友评论