2019-08-01 自定义Toast弹窗
系统自带Toast效果分析:系统自带的弹窗效果,一个空白框和文字。
系統Toast的局限性:当频繁点击按钮调用系统弹窗时,由于上一个弹窗还没有结束,便点击了下一次弹窗,此时存在一个弹窗次数的队列,所以会看到弹窗长时间不消失的效果,所以能够自定义弹窗的显示时间控制便于解决这一bug,我們正常的需求應該是:单次点击,能够显示自定的时长;频繁点击,能够实现下一次点击时,不管上一次的点击显示时长有没有达到,都应该消失。
系统弹窗效果:
系统弹窗效果实现code:
Toast.makeText(context,"弹窗文字",Toast.LENGTH_LONG).show();
自定义弹窗效果:
自定义弹窗效果实现(包括功能:弹窗自定义图片、文字、显示位置、多长时间后显示弹窗)code:
private void custTost(Context context, String tost_content, int tost_wait_time, final int tost_long_time) {
//tost_wait_time 多长时间后显示弹窗
//tost_content显示文字内容
//tost_long_time显示弹窗时长,尚未实现该功能
LayoutInflater inflater = getLayoutInflater();
View layout = inflater.inflate(R.layout.toast_custom_styles,
(ViewGroup) findViewById(R.id.ll_Toast));
ImageView image = layout.findViewById(R.id.iv_ImageToast);
image.setImageResource(R.mipmap.ic_launcher);
TextView text = layout.findViewById(R.id.tv_TextToast);
text.setText(tost_content);
final Toast toast =new Toast(context);
toast.setGravity(Gravity.RIGHT | Gravity.BOTTOM, 20, 50);
toast.setDuration(Toast.LENGTH_LONG);
toast.setView(layout);
final Timer timer =new Timer();
timer.schedule(new TimerTask() {
@Override
public void run() {
toast.show();
}
}, tost_wait_time);//10表示点击按钮之后,Toast延迟10ms后显示
}
xml布局:toast_custom_styles.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/ll_Toast"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="#ffffffff"
android:orientation="vertical">
android:id="@+id/ll_ToastContent"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="1dp"
android:layout_marginRight="1dp"
android:layout_marginBottom="1dp"
android:background="#44000000"
android:orientation="vertical"
android:padding="15dip">
android:id="@+id/iv_ImageToast"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center" />
android:id="@+id/tv_TextToast"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
android:paddingLeft="10dp"
android:paddingRight="10dp"
android:textColor="#ff000000" />